Как десериализовать json

305
12 августа 2017, 00:48

Есть следующий json

[{
    "id": [
      "11412424829"
    ],
    "o": [
      366
    ],
    "g": 3,
    "l": [
      "14720829159177850865"
    ],
    "c": 1,
    "m": "StatTrak™ AK-47 | Fire Serpent",
    "z": 4,
    "e": "FN",
    "u": "cm9",
    "p": 4271.25,
    "f": [
      "0.06850684"
    ],
    "y": [
      4
    ],
    "n": [
      0
    ],
    "b": [
      "76561198316800514"
    ],
    "v": 9,
    "h": 6
  },
  {
    "id": [
      "11412545230"
    ],
    "o": [
      650
    ],
    "g": 2,
    "l": [
      "9803423996325074679"
    ],
    "m": "★ Karambit | Gamma Doppler Emerald",
    "z": 4,
    "e": "FN",
    "u": "ddb",
    "p": 4162.1,
    "f": [
      "0.02687659"
    ],
    "y": [
      8
    ],
    "n": [
      "@TranceM8"
    ],
    "b": [
      "76561198338195694"
    ],
    "h": 6
  }
  ]

Пытаюсь его перевести в класс. Сгенерировал через встроенный генератор.

public class Rootobject
{
    public Class1[] Property1 { get; set; }
}
public class Class1
{
    public string[] id { get; set; }
    public int[] o { get; set; }
    public int g { get; set; }
    public string[] l { get; set; }
    public int c { get; set; }
    public string m { get; set; }
    public int z { get; set; }
    public string e { get; set; }
    public string u { get; set; }
    public float p { get; set; }
    public string[] f { get; set; }
    public int[] y { get; set; }
    public object[] n { get; set; }
    public string[] b { get; set; }
    public int v { get; set; }
    public int h { get; set; }
}

Вот итоговый код.

JavaScriptSerializer js = new JavaScriptSerializer();
var json = File.ReadAllText("1.txt");
var rez = js.Deserialize<Rootobject[]>(json);

Почему элементы Property1 пустые, хотя сериализация не вызвала ошибко.

Answer 1

У вас JSON имеет структуру массива данных, без какого либо имени. На сколько я знаю - указав public Class1[] Property1 { get; set; } ожидается что то вроде "Property1": [], а уж внутри ваш объект. В вашем случае это простой массив, который содержит в себе уже Class1.

Решение простое, укажите в строке var rez = js.Deserialize<Rootobject[]>(json); не Rootobject[], а Class1[].

Кстати, для таких целей существует отличный сайт, который конвертирует JSON в класс, попробуйте через него прогнать ваши данные и посмотрите на результат.

READ ALSO
Можно ли кастить template&lt;A&gt; к template&lt;B&gt; если B родитель A?

Можно ли кастить template<A> к template<B> если B родитель A?

Есть базовый класс и у него есть наследникИ есть дженерик ограниченный базовым классом

337
Поблочное считывание файла

Поблочное считывание файла

Дорогие друзья, хочу реализовать шифрование некоторых файлов на языке с# Проблема заключается в том, что ключ имеет длину 64 байта, и мне соответственно...

326
Fluent API связь один к одному

Fluent API связь один к одному

Не получается сделать связь один к одному, ошибка :

318
C#. Как отследить использование диска?

C#. Как отследить использование диска?

В диспетчере задач, во вкладке производительность можно нажать на "Диск 0 (c:)"Как получить переменную с его активным временем в процентах?

192