0

我有一个无法更改的 Json 服务,因为它不是我的。他们的 Json 以一种难以解析的方式格式化。它看起来像这样。

"people": {
     "Joe Bob": {
              "name": "Joe Bob",
              "id": "12345"
     },
     "Bob Smith": {
              "name": "Bob Smith",
              "id": "54321"
     }
 },

我真的更希望它像 JSon 数组一样布局,但目前不是。我想知道这里最好的方法。我应该在解析它之前将 Json 更改为看起来像一个数组还是加载 ExtensionData 并从中解析它?

提要中还有其他我没有问题的项目。只是坚持这一节。

谢谢

4

1 回答 1

0

您可以使用 json.net 对数据进行反序列化(您粘贴的 json,并且只进行一次解析,无需修改任何内容)。

使用比,您可以使用访问名称和值dynamic foo = JsonConvert.DeserializeObject<dynamic>(data) 来迭代列表。foo.people

您可以创建一个类(如果您知道架构是什么,并将数据反序列化为给定类的列表,例如:

    public class People
    {
        [JsonProperty(PropertyName="people")]
        public IDictionary<string, Person> Persons { get; set; }
    }

    public class Person
    {
        [JsonProperty(PropertyName="name")]
        public string Name { get; set; }

        [JsonProperty(PropertyName = "id")]
        public string Id { get; set; }
    }

然后打电话:

var obj = JsonConvert.DeserializeObject<People>(data);
foreach (var item in obj.Persons.Values)
{
      //item is instance of Person      
}

另一个好的和可能的选择是: 如何在 c# 中导航任何 JSON 树?

于 2013-04-02T22:03:11.330 回答