@MADm

Как распарсить json?

Один очень умный сервис с очень умным апи отдает вот такой кусок json
"google": {
      "regions": {
        "937": {
          "code": "Russia",
          "countryCode": "ru",
          "name": "Россия",
          "id": 937,
          "domain": {
            "code": ".ru",
            "name": "Росийская Федерация",
            "id": 175
          }
        },
        "979": {
          "code": "Bryansk,Bryansk Oblast,Russia",
          "countryCode": "ru",
          "name": "Брянск",
          "id": 979,
          "domain": {
            "code": ".ru",
            "name": "Росийская Федерация",
            "id": 175
          }
        }
      },
      "name": "Google"
    },

Проблема в том что я конверчу этот кусок в dynamic и не знаю как пройтись по свойствам в regions потому что там не массив а поля с переменными названиями. Как правильно решить такой вопрос?
  • Вопрос задан
  • 334 просмотра
Решения вопроса 1
@r_zaycev
Json.Net умеет то, что вам нужно.

Вот небольшой примерчик:
using System;
using System.Collections.Generic;
using Newtonsoft.Json;

namespace JsonTest
{
    public class Deserialized
    {
        public class Region
        {
            public class Domain
            {
                public string code { get; set; }
                public string name { get; set; }
                public int id { get; set; }
            }

            public string code { get; set; }
            public string countryCode { get; set; }
            public string name { get; set; }
            public int id { get; set; }
            public Domain domain { get; set; }
        }

        public Dictionary<int, Region> regions { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            string json = @"{
                ""regions"": {
                    ""937"": {
                      ""code"": ""Russia"",
                      ""countryCode"": ""ru"",
                      ""name"": ""Россия"",
                      ""id"": 937,
                      ""domain"": {
                        ""code"": "".ru"",
                        ""name"": ""Росийская Федерация"",
                        ""id"": 175
                      }
                    },
                    ""979"": {
                      ""code"": ""Bryansk,Bryansk Oblast,Russia"",
                      ""countryCode"": ""ru"",
                      ""name"": ""Брянск"",
                      ""id"": 979,
                      ""domain"": {
                        ""code"": "".ru"",
                        ""name"": ""Росийская Федерация"",
                        ""id"": 175
                      }
                    }
                  }
            }";

            Deserialized data = JsonConvert.DeserializeObject<Deserialized>(json);
        }
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
У меня точно такая же ситуация, но на Java.
public static class OrderBasketTypeAdapter implements JsonDeserializer<OrderDto.Basket> {
    @Override
    public OrderDto.Basket deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        Set<Map.Entry<String, JsonElement>> entries = json.getAsJsonObject().entrySet();
        OrderDto.Basket result = new OrderDto.Basket();
        for (Map.Entry<String, JsonElement> entry : entries) {
            OrderDto.Basket.BasketItemDto item = context.deserialize(entry.getValue(), OrderDto.Basket.BasketItemDto.class);
            result.items.add(item);
        }
        return result;
    }
}
Ответ написан
Комментировать
Rou1997
@Rou1997
Получать доступ по ключу необязательно, можно просто к массиву всех ветвей объекта (child nodes).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы