c# - 如何解析没有定义结构的 JSON.NET 文件?

标签 c# asp.net dictionary json.net deserialization

我正在使用 OpenCalais 的 API,它为我提供了一个包含一堆 JSON 对象的 json 字符串。问题是,根据我传递到 API 的内容,JSON 字符串的结构会发生变化,这意味着我无法针对我可以创建的自定义类进行反序列化。另一个问题是输出不是键值形式,而是复杂的对象结构。这是输出的示例-

{"doc":
{"info":
{"allowDistribution":"true",
"allowSearch":"true",
"calaisRequestID":"c1cdd79a-ed89-8431-138c-50e8a37100f9",
"externalID":"17cabs901",
"id":"http://id.opencalais.com/0RCcU306*HTR05*7HlUb5A",
"docId":"http://d.opencalais.com/dochash-1/6188237f-a2a5-3263-95b7-ea894ba98298",
"document":"Bill Gates worked at Microsoft from 2008 to 2011. He is also married to Melinda Gates.",
"docTitle":"",
"docDate":"2012-07-26 15:51:00.885",
"externalMetadata":"",
"submitter":"ABC"}

所以你可以看到这里有多个级别的对象,并且没有键值结构。我从这段代码中需要的基本上是字典中的所有名称/值信息。然后我可以根据相关信息的键进行排序。如果我也能以某种方式获取对象值的父级,那就太酷了。例如,我想要的输出是键:allowSearch,值:true,父级:info。我一直在尝试使用不同的反序列化方法、动态对象以及使用 .Ancestor 等函数进行简单解析,但我没有找到任何有用的东西。任何帮助将不胜感激。

最佳答案

你看过JSON.NET吗? ?它可以动态解析 JSON,然后您可以对其进行迭代:

using Newtonsoft.Json.Linq;

JObject rootObject = JObject.Parse(jsonString);

您可以迭代子节点,或搜索其他节点,如下所示:

JToken info = rootObject.SelectToken("info");

关于c# - 如何解析没有定义结构的 JSON.NET 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11724811/

相关文章:

c# - 如何获取构建过程模板中的参数值

c# - 如何将行为附加到 WPF DataGrid 中的 DataGridCell?

java - Map<String, Integer> 中的问题计数

python - 如果实例记录在类字典中,__del__ 不起作用

c# - C#创建文件夹时添加数字后缀

c# - 如何使输入字段可选?

javascript - 禁用asp项目中的右键单击

asp.net - Gridview 默认编辑中的多行文本框

python - 将可变变量(例如列表)作为 Python 字典中的值进行引用 - 什么是最佳实践?

c# - 在 C# 中打印 pcl 文件不起作用,建议?