0

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

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

我想枚举所有项目以获取键:值对。请注意,层次结构很重要,因为多个对象可能具有相同的键但不同的父对象。另请注意,我不知道键,我需要获取键和值,因此我无法立即从中获取 POCO 对象。

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

4

2 回答 2

2

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

于 2012-10-18T04:11:19.953 回答
1

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

您最好的选择可能是使用 C#动态类型。由于这个原因,Facebook C# SDK 使用动态,因此他们不必尝试与不断变化的数据保持同步。你可以在这里阅读他们的理由,也许它可以提供一些关于如何对数据进行类似建模的建议。

于 2012-10-18T03:55:47.610 回答