Десериализация json в Dictionary

392
08 августа 2017, 13:22

Хочу десериализоваьь json-файл в Dictionary. Сначала получаю ссылку с сервера, а потом делаю как на сайте Newtonsoft.com deserialising Dictionary, но вылетает исключение

Unexpected character encountered while parsing value @.Path:line 0 position 0.

Пытался исправить добавлением к строке кавычки и знака @, но ошибка та же

using (var webClient = new System.Net.webClient(){Encoding=Encoding.UTF8})
{
JObject json = JObject.Parse(webClient.DownloadString(MyUrl));
 string json = "@\"" + json + "\""; //не работает ни с этой строкой, ни без неё 
 Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string,string>>(newjson);
 }

Вот json-файл:

{ 
"response": {
    "status": "ok",
    "data": {
        "30": {
            "title": "London",
            "Country": "Britain"
        },
        "24": {
            "title": "Paris",
            "Country": "France"
        }
    },
    "count": 2
}}

Нужно, чтобы я мог получить связку страна-город

Answer 1

Связку "Страна-Город" можно получить так:

var json = JObject.Parse(str);
var result = json["response"]?["data"]?
       .Select(s => new
       {
           Country = s.First?["Country"]?.ToString(),
           City = s.First?["title"]?.ToString()
       })
       .ToDictionary(k => k.Country, v => v.City) ?? 
        new Dictionary<string, string>();

Получить данные в формате "Лондон -30", "Париж - 24".

var result = json["response"]?["data"]?
           .Select(s => new
            {
               Number = (s as JProperty)?.Name,
               City = s.First?["title"]?.ToString()
            })
            .ToDictionary(k => k.City, v => v.Number) ?? 
            new Dictionary<string, string>();
Answer 2

Вот примерно так у меня получилось разобрать ваш json :

Структура классов :

public class Rootobject
{
    public Response response { get; set; }
}
public class Response
{
    public string status { get; set; }
    public Dictionary<string, CountryClass> data { get; set; }
    public int count { get; set; }
}
public class CountryClass
{
    public string title { get; set; }
    public string Country { get; set; }
}

Десериализация :

string json = "{\"response\": {\"status\": \"ok\",\"data\": {\"30\": {\"title\": \"London\",\"Country\": \"Britain\"},\"24\": {\"title\": \"Paris\",\"Country\": \"France\"}},\"count\": 2}}";
Rootobject values = JsonConvert.DeserializeObject<Rootobject>(json);
READ ALSO
Не работает библиотека NCron из NuGet

Не работает библиотека NCron из NuGet

Пытаюсь задать выполнение метода про расписанию с помощью NCron:

426
Asp Core добавление нового способа регистрации с использованием Identity

Asp Core добавление нового способа регистрации с использованием Identity

Доброго дня, Возник вопрос, имею WebApplication на AspNetCore 11

341
Узнать координаты Grid

Узнать координаты Grid

На WPF странице есть родительский контейнер canvas в котором расположены несколько grid, как получить координаты Point одного из этих grid ?

281