首页 >后端开发 >C++ >如何使用 JavaScriptSerializer 或 DataContractJsonSerializer 将 JSON 字段名称映射到 .NET 对象属性?

如何使用 JavaScriptSerializer 或 DataContractJsonSerializer 将 JSON 字段名称映射到 .NET 对象属性?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-10 09:04:42648浏览

How to Map JSON Field Names to .NET Object Properties Using JavaScriptSerializer or DataContractJsonSerializer?

将 JSON 字段名称映射到 .NET 对象属性

将 JSON 数据解析为 .NET 对象通常需要将 JSON 字段名称映射到相应的对象属性。 当 JSON 字段名称与 .NET 属性名称不同时,这一点变得至关重要。虽然 JavaScriptSerializer.Deserialize 可能看起来很方便,但它并不总是可靠地处理名称不匹配。 更强大的解决方案利用 DataContractJsonSerializer.

使用 DataContractJsonSerializer 进行可靠映射

DataContractJsonSerializer 通过 DataMember 属性提供对字段名称映射的精确控制。 方法如下:

<code class="language-csharp">[DataContract]
public class DataObject
{
    [DataMember(Name = "user_id")]
    public int UserId { get; set; }

    [DataMember(Name = "detail_level")]
    public string DetailLevel { get; set; }
}</code>

这段代码定义了一个DataObject类。 DataMember 属性将 JSON 字段“user_id”和“detail_level”分别显式映射到 .NET 属性 UserIdDetailLevel

反序列化就很简单了:

<code class="language-csharp">DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(DataObject));
MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(JsonData));
DataObject dataObject = serializer.ReadObject(ms) as DataObject;</code>

此代码片段将 JSON 数据 (JsonData) 反序列化为 DataObject 实例。

注意事项:

  • 虽然 DataContractJsonSerializerJavaScriptSerializer 相比提供了更出色的映射功能,但它可能稍微冗长一些。
  • 对于定义为枚举的 DetailLevel 属性,自定义 DataContractResolver 可以促进值映射。
  • DataContractJsonSerializer 也与 Silverlight 兼容。

以上是如何使用 JavaScriptSerializer 或 DataContractJsonSerializer 将 JSON 字段名称映射到 .NET 对象属性?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn