C#. Как правильно разобрать JSON?

286
09 марта 2018, 12:44

Добрый день! Пытаюсь разобрать Json ответ от API на классы итд. Классы сгенерировал на jsonutils.com

Скопировал в проект, прописал:

var fb = new WebClient() {Encoding = System.Text.Encoding.UTF8}.DownloadString(URI);
var list = JsonConvert.DeserializeObject<List<Example>>(fb);

Получаю следующее:

Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[chat.Example]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.

Подскажите пожалуйста как решить проблему? Спасибо заранее!

JSON - ignn.ru/t/messages.json

Answer 1

Вот, нашёл свой старый проект и сделал под вашу задачу. Делал на коленке, так что не ругайте сильно)

static void Main(string[] args)
    {
        WebClient client = new WebClient();
        var str = client.DownloadString("http://ignn.ru/t/messages.json");
        str = str.Insert(0, "[");
        str = str.Insert(str.Length, "]");
        var json = JsonConvert.DeserializeObject<RootObject[]>(str);
        foreach (var rootObject in json)
        {
            Console.WriteLine(rootObject.start);
            Console.WriteLine("------------");
            Console.WriteLine(rootObject.chunk.First());
            Console.WriteLine("------------");
            Console.WriteLine(rootObject.end);
            Console.WriteLine("------------");
        }
        Console.ReadLine();
    }
    public class Unsigned
    {
        public int age { get; set; }
    }
    public class Content
    {
        public string body { get; set; }
        public string msgtype { get; set; }
    }
    public class Chunk
    {
        public object origin_server_ts { get; set; }
        public string sender { get; set; }
        public string event_id { get; set; }
        public int age { get; set; }
        public Unsigned unsigned { get; set; }
        public Content content { get; set; }
        public string room_id { get; set; }
        public string user_id { get; set; }
        public string type { get; set; }
    }
    public class RootObject
    {
        public string start { get; set; }
        public List<Chunk> chunk { get; set; }
        public string end { get; set; }
    }
READ ALSO
Удаленное подключение к БД

Удаленное подключение к БД

Есть 2 пкНа одном установлен MSSQL, на другом стоит программа(написанная на C#) на котором нету MSSQL

194
Как узнать символ в консоли под курсором?

Как узнать символ в консоли под курсором?

Например в консоли есть символ "#" в координатах (0,0) как узнать что там символ "#" ,а не "?"

268
Mock не виртуального метода чужого класса

Mock не виртуального метода чужого класса

Не могу протестировать метод из за того что класс Row является составной частью чужой библиотеки

258
Создание колоды из двух Enum

Создание колоды из двух Enum

Я хочу создать колоду карт используя два Enum

208