首页 >后端开发 >C++ >如何将混合类型值的 JSON 数组反序列化为强类型 C# 数据类?

如何将混合类型值的 JSON 数组反序列化为强类型 C# 数据类?

Patricia Arquette
Patricia Arquette原创
2025-01-24 04:26:10980浏览

How to Deserialize a JSON Array of Mixed-Type Values into Strongly Typed C# Data Classes?

将具有固定模式的值数组反序列化到强类型数据类

问题:

将特定格式的 JSON 数据反序列化到强类型数据类时,会面临挑战。数据包含一个具有混合字符串和整数值的玩家数组,并且玩家类完全由未命名值组成,且顺序固定。

解决方案:

自定义转换器和数据协定属性的组合允许高效的反序列化:

  1. 创建自定义转换器:

    实现一个将对象转换为数组的自定义转换器:

    <code class="language-c#">public class ObjectToArrayConverter<T> : JsonConverter
    {
        // 实现 WriteJson 和 ReadJson 函数
    }</code>
  2. 将自定义转换器和数据协定属性应用于 Player:

    将自定义转换器应用于 Player 类,并使用数据协定属性指定其属性的顺序:

    <code class="language-c#">[JsonConverter(typeof(ObjectToArrayConverter<Player>))]
    [DataContract]
    public class Player
    {
        [DataMember(Order = 1)]
        public int UniqueID { get; set; }
        [DataMember(Order = 2)]
        public string PlayerDescription { get; set; }
    }</code>
  3. 将根对象修改为字典:

    将根对象中 players 属性的类型更改为字典,使用玩家用户名作为键:

    <code class="language-c#">public class ScoreboardResults
    {
        // ...
        public Dictionary<string, Player> players { get; set; }
    }</code>

示例:

以下代码示例演示了使用此解决方案进行反序列化:

<code class="language-c#">using Newtonsoft.Json;

var json = "{...}";
var results = JsonConvert.DeserializeObject<ScoreboardResults>(json);</code>

其他说明:

  • 如果使用数据协定属性,请记住添加对 System.Runtime.Serialization 命名空间的引用。
  • 此解决方案假设具有已知属性名称的固定模式。对于动态模式,可能需要更高级的反序列化技术。

以上是如何将混合类型值的 JSON 数组反序列化为强类型 C# 数据类?的详细内容。更多信息请关注PHP中文网其他相关文章!

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