Изменить Json или ExtensionDataObject

У меня есть служба Json, которую я не могу изменить, поскольку она не моя. Их Json отформатирован таким образом, что анализировать его сложно. Это выглядит примерно так.

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

Я действительно предпочел бы, чтобы это было выложено как массив JSon, однако в настоящее время это не так. Мне интересно, лучший подход здесь. Должен ли я изменить Json, чтобы он выглядел как массив, прежде чем я проанализирую его или загрузлю ExtensionData и проанализирую его?

В ленте есть другие элементы, с которыми у меня нет проблем. Просто застрял с этим одним разделом.

Спасибо

1 ответ

Решение

Вы можете использовать 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      
}

Другим хорошим и возможным вариантом будет: Как я могу перемещаться по любому дереву JSON в C#?

Другие вопросы по тегам