我想取一些Json并将其解析为键/值对的集合,但有些值本身就是字典。我尝试了通常的Newtonsoft反序列化。它很接近,但不完全正确。最终结果必须是字典,而不是强类型类。
这是一个Json的例子:
{
"JobNumber": 1010,
"Asset": null,
"JobNotes": [
{
"NoteText": "It's not working.",
"NoteType": "Complaint"
},
{
"NoteText": "Needs to be fixed",
"NoteType": "Job"
}
]
}
这是我用来反序列化的代码:
var json = File.ReadAllText(@"c:\temp\job.json");
var result = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
结果几乎是正确的,但键为“JobNotes”的项的值只是json string。我希望解析器递归并将内部Json反序列化到字符串和对象的进一步字典中。有没有方法可以用Newtonsoft库做到这一点?或者,是否有其他的库可以完成这个任务?我是否可以挂钩到解析方法来覆盖那个时间点的功能?
4条答案
按热度按时间sqxo8psd1#
这是@DanielKeogh的代码的修改版本,运行良好。
这个修改后的Json显示了它的深度:
结果结束三个字典深度,以便我可以通过键获得“Something”值。
vfwfrxfs2#
这可以通过一点递归来完成。我将把定义
IsJson
留给你作为学术练习。:)vybvopom3#
将此对象用于json字符串
然后可以反序列化它
hwamh0ep4#
修改了@ christian-findlay的答案,在迭代时也将
JObject
类型转换为Dictionary〈string,object〉: