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

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

Linda Hamilton
发布: 2025-01-24 04:06:09
原创
551 人浏览过

本文演示了如何将包含混合数据类型的 JSON 数组反序列化为强类型 C# 类。 挑战在于 JSON 的架构不一致,其中字典的值是未命名元素的数组。

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

示例 JSON 如下所示:

<code class="language-json">{
    "timestamp": 1473730993,
    "total_players": 945,
    "max_score": 8961474,
    "players": {
            "Player1Username": [
            121,
            "somestring",
            679900,
            5,
            4497,
            "anotherString",
            "thirdString",
            "fourthString",
            123,
            22,
            "YetAnotherString"],
        "Player2Username": [
            886,
            "stillAstring",
            1677,
            1,
            9876,
            "alwaysAstring",
            "thirdString",
            "fourthString",
            876,
            77,
            "string"]
        }
}</code>
登录后复制

该解决方案使用 Newtonsoft.Json 和自定义转换器 ObjectToArrayConverter<T> 将未命名数组元素映射到 Player 类中的属性。 带有 JsonProperty 参数的 Order 属性对于根据数组元素的位置将数组元素正确映射到类属性至关重要。

这是关键类的简化表示:

玩家类别:

<code class="language-csharp">[JsonConverter(typeof(ObjectToArrayConverter<Player>))]
public class Player
{
    [JsonProperty(Order = 1)]
    public int UniqueID { get; set; }
    [JsonProperty(Order = 2)]
    public string PlayerDescription { get; set; }
    // ... other properties ...
}</code>
登录后复制

ObjectToArrayConverter<T> 类(为简洁起见省略了实现)处理转换逻辑。 根对象 ScoreboardResults 被定义为保存整个 JSON 结构:

记分板结果类:

<code class="language-csharp">public class ScoreboardResults
{
    public int timestamp { get; set; }
    public int total_players { get; set; }
    public int max_score { get; set; }
    public Dictionary<string, Player> players { get; set; }
}</code>
登录后复制

或者,DataContractDataMember 属性可以通过指定属性的顺序来实现类似的结果。 本文建议探索演示小提琴(此处未包含链接)以获取完整的代码示例。 这种方法可以有效地将复杂、结构不一致的 JSON 数据反序列化为强类型 C# 对象。

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

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