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

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

Patricia Arquette
发布: 2025-01-24 04:26:10
原创
921 人浏览过

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中文网其他相关文章!

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