首页 > 后端开发 > C++ > 如何在 C# 中将 JSON 属性序列化/反序列化为值而不是对象?

如何在 C# 中将 JSON 属性序列化/反序列化为值而不是对象?

Mary-Kate Olsen
发布: 2024-12-28 11:24:33
原创
531 人浏览过

How to Serialize/Deserialize JSON Properties as Values Instead of Objects in C#?

将 JSON 属性序列化/反序列化为值而不是对象:深入指南

在许多应用程序中,数据以 JSON 格式表示以实现高效的存储和传输。但是,有时默认的 JSON 表示形式可能与我们所需的格式不一致。在处理自定义数据类型时尤其如此。在本文中,我们将探讨程序员在序列化/反序列化具有自定义数据类型属性的类时面临的问题以及如何克服该问题。

问题陈述

考虑以下代码:

class Car
{
    public StringId Id { get; set; }
    public string Name { get; set; }
}

class StringId
{
    public string Value { get; set; }
}
登录后复制

当尝试序列化 Car 类的对象时,我们可能期望以下 JSON表示:

{ "Id": "someId", "Name": "Ford" }
登录后复制

但是,JSON.NET 中的默认行为会导致不同的表示:

{ "Id" : { "Value": "someId" }, "Name": "Ford" }
登录后复制

这是因为 StringId 属性被序列化为对象而不是简单的对象

解决方案 1:使用TypeConverter

解决此问题的一种方法是为 StringId 类创建一个 TypeConverter。 JSON.NET 在序列化/反序列化对象时会自动检测并使用此转换器。以下是如何为 StringId 实现 TypeConverter:

[TypeConverter(typeof(StringIdConverter))]
class StringId
{
    public string Value { get; set; }
}

class StringIdConverter : TypeConverter
{
    // Implementation of CanConvertFrom, CanConvertTo, ConvertFrom, and ConvertTo methods
}
登录后复制

此 TypeConverter 允许 JSON.NET 将 StringId 对象与字符串相互转换。

解决方案 2:使用自定义 JsonConverter

另一种方法是使用自定义 JsonConverter。这提供了对序列化/反序列化过程的更多控制。以下是如何为 StringId 实现自定义 JsonConverter:

[JsonConverter(typeof(StringIdConverter))]
class StringId
{
    public string Value { get; set; }
}

class StringIdConverter : JsonConverter
{
    // Implementation of CanConvert, ReadJson, and WriteJson methods
}
登录后复制

此 JsonConverter 允许我们精确指定 StringId 对象应如何在 JSON 中表示。

其他注意事项

需要注意的是,类型转换器仅在 .NET Core 中受支持JSON.NET 10.0.1 及更高版本。对于旧版本,应使用自定义 JsonConverters。

以上是如何在 C# 中将 JSON 属性序列化/反序列化为值而不是对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板