使用 Newtonsoft 解析带有嵌套和变量字典的 Json [重复]
Posted
技术标签:
【中文标题】使用 Newtonsoft 解析带有嵌套和变量字典的 Json [重复]【英文标题】:Parsing Json with nested and variable dictionaries using Newtonsoft [duplicate] 【发布时间】:2021-06-22 09:02:17 【问题描述】:我有一个如下所示的 Json:
"id": "1367",
"title": "ticket sample",
"custom_fields":
"13084":
"E0D4ED43": "South"
,
"13085":
"F19DF0D6": "Atlanta"
,
"13089":
"AF0EC62F": "Peter Johnson"
为了解析它,我的类使用嵌套字典:
class incident
public string id get; set;
public string title get; set;
public Dictionary<int, Dictionary<string, string>> custom_fields get; set;
这就像一个魅力,直到我发现自定义字段并不总是相同,例如我可以收到:
"id": "1367",
"title": "ticket sample",
"custom_fields":
"13084":
"E0D4ED43": "South"
,
"13085":
"F19DF0D6": "Atlanta"
,
"13086": "SAP",
"13088":
"AE3ED01A": "Commercial"
如果您查看自定义字段“13086”,它不包含另一个对象(它只是一个字符串),所以当我尝试使用前一个类解析时它会失败。
这些是两种不同响应的示例,但收到的密钥发生了很大变化(这就是我使用字典的原因,因为我不知道每张票会收到多少个和哪些)
【问题讨论】:
您将需要使用自定义转换器。您是否知道自定义字段值始终是字符串或字符串字典,或者它们可以是 anything? @dbc 现在我只看到字符串或字符串字典,但你只是吓到我了!我认为它可以是任何东西,甚至是数组...... @HernanRomero 我认为你应该使用 DictionaryDictionary<string, string>
可能是一件事,那么这很简单。可以修改第一条评论中发布的链接以处理此用例。
@HernanRomero,你可以序列化和反序列化到类事件 public string id get;放; 公共字符串标题 获取;放; 公共字典感谢大家的cmets。感谢他们,我想通了并找到了适合我的解决方案。
基本上,我使用了@DilshodK 提出的“Dictionary
class incident_custom
public string id get; set;
public string title get; set;
public Dictionary<int, object> custom_fields get; set;
incident_custom item = JsonConvert.DeserializeObject<incident_custom>(responseBody);
Console.WriteLine(item.title);
foreach (var field in item.custom_fields)
if (field.Value.GetType() == typeof(Newtonsoft.Json.Linq.JObject))
Dictionary<string, object> values = JsonConvert.DeserializeObject<Dictionary<string, object>>(field.Value.ToString());
foreach (var value in values)
Console.WriteLine(field.Key + " - " + value.Value);
else
Console.WriteLine(field.Key + " - " + field.Value);
【讨论】:
以上是关于使用 Newtonsoft 解析带有嵌套和变量字典的 Json [重复]的主要内容,如果未能解决你的问题,请参考以下文章
C# Newtonsoft.Json 解析多嵌套json 进行反序列化
C# Newtonsoft.Json 解析多嵌套json 进行反序列化