从 JSON 反序列化重复字典

Posted

技术标签:

【中文标题】从 JSON 反序列化重复字典【英文标题】:Deserializing Repeating Dictionaries from JSON 【发布时间】:2019-09-27 21:06:18 【问题描述】:

我正在尝试使用 JSON.net 对大型 JSON 文件进行反序列化。我一直无法反序列化此文件中的嵌套字典。包含这些字典的对象的名称在文件中重复了数千次。我提供的代码是我正在处理的文件的一个小型缩短版本,以显示这些重复嵌套字典的示例。我正在寻找一种解决方案,将数千个“image_uris”的内容反序列化为我想的类,这样我就可以从每个“image_uris”访问“小”、“中”和“大”键和值对象。

[
    
        "object":"card",
        "id":"789",
        "image_uris":
        
            "small":"https://img...98713",
            "medium":"https://img...89712",
            "large":"https://img...97123",
        
    ,
    
        "object":"card",
        "id":"654",
        "image_uris":
        
            "small":"https://img...43243",
            "medium":"https://img...26267",
            "large":"https://img...00812",
        
    ,
    
        "object":"card",
        "id":"091",
        "image_uris":
        
            "small":"https://img...98760",
            "medium":"https://img...92331",
            "large":"https://img...87690",
        
    
]

我一直在 Unity 游戏引擎中工作,使用 C# 和 JSON.net。我尝试使用http://json2csharp.com/,将整个 JSON 文件提供给它。它吐出约 1700 行代码,并在顶部注释了实现说明。我不确定如何按照这些说明访问所有生成的类和这些类中的数据。这些说明如下:

// <auto-generated />
//
// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
//
//    using QuickType;
//
//    var scryfallDefaultCards = ScryfallDefaultCards.FromJson(jsonString);

【问题讨论】:

【参考方案1】:

不确定是什么问题,但我只是将您的 JSON sn-p 复制粘贴到您访问的同一站点并得到了这个:

public class ImageUris

    public string small  get; set; 
    public string medium  get; set; 
    public string large  get; set; 


public class RootObject

    public string @object  get; set; 
    public string id  get; set; 
    public ImageUris image_uris  get; set; 

但是你的 JSON 是一个数组,你应该像这样反序列化:

var result = JsonConvert.DeserializeObject<List<RootObject>>(jsonString);

使用较大的 JSON 字符串应该也能正常工作

【讨论】:

以上是关于从 JSON 反序列化重复字典的主要内容,如果未能解决你的问题,请参考以下文章

使用JSON.Net反序列化包含字典的字节数组[重复]

Objective-C Mantle,反序列化 JSON 字典

Json.NET:反序列化嵌套字典

C# JSON 反序列化:如何从 JSON 对象数组中获取值 [重复]

Unity Json反/序列化嵌套数据[重复]

Newtonsoft Json 将字典反序列化为来自 DataContractJsonSerializer 的键/值列表