【发布时间】: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 我认为你应该使用 Dictionary
-
@DilshodK 你得到一个非反序列化的 JToken 那么你将如何处理它? -- 编写一个 JsonConverter 来反序列化这些对象并不复杂,无论它们在输入中是什么。只需决定要反序列化到什么。关键是您是否需要序列化并序列化回什么。如果将所有序列化回
Dictionary<string, string>可能是一件事,那么这很简单。可以修改第一条评论中发布的链接以处理此用例。 -
@HernanRomero,你可以序列化和反序列化到类事件 { public string id { get;放; } 公共字符串标题 { 获取;放; } 公共字典
custom_fields { 获取;放; } }
标签: c# json dictionary parsing json.net