@Envywewok

Как правильно дессериализовать json в объект C#?

Не получается нормально дессериализовать json. Не встречал раньше такую структуру, не знаю как класс правильно описать.
Вот пример ответа сервера
{
    "time": 1556008469,
    "states": [
        [
            "4248f4",
            "AFL2040 ",
            "United Kingdom",
            1556008469,
            1556008469,
            24.8216,
            52.5425,
            10363.2,
            false,
            236.66,
            233.75,
            0,
            null,
            10347.96,
            "5123",
            false,
            0
        ],
        [
            "471f82",
            "",
            "Hungary",
            1556008469,
            1556008469,
            26.7204,
            52.2582,
            10972.8,
            false,
            238.44,
            237.06,
            0,
            null,
            11003.28,
            "6230",
            false,
            0
        ]
    ]
}


Как я понял это массив массивов Object-ов.
Так я описал класс для дессериализации
public class Answer
    {
        public int time { get; set; }
        public List<List<object>> states { get; set; }
  }

_________________________________________________________________________

Это класс запроса на сервер и попытки дессериализации
в блоке try пытаюсь получить инфу в объект но он остается пустым
_________________________________________________________________________
using System;
using System.IO;
using System.Net;
using Newtonsoft.Json;
using QuickDeser;

namespace ConsoleApplication2
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            WebRequest request = WebRequest.Create("https://opensky-network.org/api/states/all?lamin=51.421812&lomin=23.139124&lamax=55.961184&lomax=33.472494");
            WebResponse response = request.GetResponse();
            Answer answer;
            using (Stream stream = response.GetResponseStream())
            {
                using (StreamReader reader = new StreamReader(stream))
                {
                    string line = "";
                    try
                    {
                        answer = JsonConvert.DeserializeObject<Answer>(line);
                        Console.WriteLine(answer.ToString());
                    }
                    catch (NullReferenceException e)
                    {
                        Console.WriteLine("Ничего нету");
                        throw;
                    }
                  
                }     
            }
            response.Close();
            Console.WriteLine("Запрос выполнен");
            Console.Read();
        }
      }
    }
  • Вопрос задан
  • 311 просмотров
Решения вопроса 1
WNeZRoS
@WNeZRoS
Добавил комментариев к куску вашего кода.
string line = "";
try
{
    // line всё ещё пустая
    answer = JsonConvert.DeserializeObject<Answer>(line); // десериализация из пустой строки
    Console.WriteLine(answer.ToString());
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@NewDevLab
Скопируй JSON в буфер обмена, далее Правка -> Специальная вставка.
Ответ написан
Комментировать
@Envywewok Автор вопроса
Исправил код
string fullJson = "";
                    string line = "";
                    while ((line = reader.ReadLine()) != null)
                    {
                        fullJson += line;
                    }
                   // Console.WriteLine(fullJson);
                    try
                    {
                        answer = JsonConvert.DeserializeObject<Answer>(fullJson);


                    // думал распарсить то что получилось еще раз, но answer же теперь не строка а объект)
                    // это класс для парсинга дальше
                    //  public class SecondLevelDeser
                    //   {
                   //   public List<object> state { get; set; }
                   //    }


                   //  так пробывал парсить
                    // secondLevelDeser = JsonConvert.DeserializeObject<SecondLevelDeser>(answer); 
                        Console.WriteLine(answer);
                    }
                    catch (NullReferenceException e)
                    {
                        Console.WriteLine("Ничего нету");
                        throw;
                    }

Роман очень помог, теперь я смог получить объект в таком виде, и он хранится получается в экземпляре answer
answer = JsonConvert.DeserializeObject<Answer>(fullJson);

5cbee3e8ba467267220167.png

Подскажите как дальше достучатся ( не могу понять)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы