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

时间:2012-10-18 03:49:29

标签: c# json

我有服务会在'json'中收到一些数据,我不知道哪些数据。但是我有可能存在的一组属性。 Json格式是这样的,无法更改,名称可能不同:

{"Parent1":
     {"Child1":"Value1","Child2":"Value2"},
 "Parent2":
     {"Child1":"Value1","Child2":"Value2"},
 "Parent3":
     {"Child1":
          {"SubChild1":"Value1","SubChild2":"Value2"}}
}

我想枚举所有项目以获取密钥:值对。 请注意,层次结构很重要,因为几个对象可以具有相同的键但父级不同。 另请注意,我不知道键,我需要获取键和值,所以我不能直接得到POCO对象。

所以问题基本上是:如何获得一个集合,通过所有属性(具有key和value的访问权限)实现一些迭代器,并支持层次结构。

2 个答案:

答案 0 :(得分:2)

您始终可以将JSON输入反序列化为某些(无类型)DOM,您可以在其中遍历代表JSON文档的树。有几个选项:JavaScriptSerializer类,它将JSON反序列化为Dictionary<string, object>(对于将反序列化为object[]的数组)。或者您可以使用第三方库,例如JSON.NET,您可以将任意JSON反序列化为JToken / JObject / JArray / JValue树,并使用这些类中的方法遍历它。

答案 1 :(得分:1)

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

您最好的选择可能是使用C#dynamic类型。由于这个原因,Facebook C#SDK使用动态,因此他们不必尝试及时更新不断变化的数据。您可以阅读他们的理由here,也许它可以提供一些建议,说明如何对数据进行类似的建模。