C#Json解析器-一个接一个

C#Json解析器-一个接一个,c#,json,C#,Json,我有一个服务将接收一些“json”格式的数据,我不知道是哪个数据。但是,我有一组可能存在的属性。 Json格式与此类似,无法更改,名称可能不同: {"Parent1": {"Child1":"Value1","Child2":"Value2"}, "Parent2": {"Child1":"Value1","Child2":"Value2"}, "Parent3": {"Child1": {"SubChild1":"Value1","SubC

我有一个服务将接收一些“json”格式的数据,我不知道是哪个数据。但是,我有一组可能存在的属性。 Json格式与此类似,无法更改,名称可能不同:

{"Parent1":
     {"Child1":"Value1","Child2":"Value2"},
 "Parent2":
     {"Child1":"Value1","Child2":"Value2"},
 "Parent3":
     {"Child1":
          {"SubChild1":"Value1","SubChild2":"Value2"}}
}
我想通过枚举所有项来获得键:值对。 请注意,层次结构很重要,因为多个对象可能具有相同的键,但具有不同的父对象。 另外请注意,我不知道键,我需要得到键和值,所以我不能马上得到一个POCO对象


因此,问题基本上是:如何获得一个集合,该集合将通过所有属性实现某种迭代器(带有键和值的访问器),并支持层次结构。

您的问题并不清楚您对返回的JSON格式有多少了解。如果您不知道任何密钥名称,那么您可能无法使用反序列化程序并从中获得良好的C#POCO


你最好的选择可能是使用C型。Facebook的C#SDK之所以使用dynamic,正是因为这个原因,所以他们不必试图跟上不断变化的数据。你可以阅读他们的论据,也许它可以给你一些建议,让你可以对你的数据进行相似的建模

您的问题并不清楚您对返回的JSON格式了解多少。如果您不知道任何密钥名称,那么您可能无法使用反序列化程序并从中获得良好的C#POCO


你最好的选择可能是使用C型。Facebook的C#SDK之所以使用dynamic,正是因为这个原因,所以他们不必试图跟上不断变化的数据。你可以阅读他们的论据,也许它可以给你一些建议,让你可以对你的数据进行相似的建模

您始终可以将JSON输入反序列化到某个(非类型化)DOM中,在该DOM中可以遍历表示JSON文档的树。有两个选项:类,它将把JSON反序列化到
字典
(对于数组,它将反序列化到
对象[]
)。或者您可以使用第三方库,例如,您可以将任意JSON反序列化为JToken/JObject/JArray/JValue树,并使用这些类中的方法遍历它。

您始终可以将JSON输入反序列化到某个(非类型化)DOM中,在该DOM中可以遍历表示JSON文档的树。有两个选项:类,它将把JSON反序列化到
字典
(对于数组,它将反序列化到
对象[]
)。或者您可以使用第三方库,例如,您可以将任意JSON反序列化为JToken/JObject/JArray/JValue树,并使用这些类中的方法遍历它。

我快速查看一下您在此处发布的链接,它们使用键访问属性,当我需要其他方法时:收集对象,然后检索键值对。我可以得到动态,并将其转换为字典,但我希望有更干净的方法。如果我错了,请纠正我,谢谢如果你对数据的结构一无所知,这可能是你能做的最好的了。我快速浏览了一下你在这里发布的链接,他们使用键访问属性,而我需要其他方式:收集对象,然后检索键值对。我可以得到动态,并将其转换为字典,但我希望有更干净的方法。如果我错了,请纠正我,谢谢你如果你对你的数据结构一无所知,那可能是你能做的最好的了。谢谢,这就是我所知道的-用newtonsoft library。。。然而,他们并不是真的很高兴,因为他们在每个层次结构中都有一个额外的层次。。。很难解释。。。谢谢你,汉克斯,这就是我所知道的-与newtonsoft图书馆。。。然而,他们并不是真的很高兴,因为他们在每个层次结构中都有一个额外的层次。。。很难解释。。。感谢您探索Json.net,它是序列化/反序列化Json的有用库,如果您没有对象类型,那么您也可以迭代它,尝试探索JSonArray。尝试探索Json.net,它是序列化/反序列化Json的有用库,如果您没有对象类型,那么您也可以迭代它,尝试探索JSonArray。