从 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 反序列化重复字典的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C Mantle,反序列化 JSON 字典
C# JSON 反序列化:如何从 JSON 对象数组中获取值 [重复]
Newtonsoft Json 将字典反序列化为来自 DataContractJsonSerializer 的键/值列表