Как читать массив json? - PullRequest
0 голосов
/ 09 мая 2020

У меня есть json файл:

[{
    "name": "SiO2",
    "h": 906,
    "s": -477,
    "a": 44,
    "b": 67,
    "c": 47
  },
  {
    "name": "Al2O3",
    "h": 805,
    "s": -155,
    "a": 53,
    "b": 73,
    "c": 62
  }
...
]

И я пытаюсь прочитать все объекты через Newtonsoft. Json

public class CompoundProps
{
    public string name { set; get; }
    public float h { set; get; }
    public float s { set; get; }
    public float a { set; get; }
    public float b { set; get; }
    public float c { set; get; }
}

var assembly = Assembly.GetExecutingAssembly();
var stream = assembly.GetManifestResourceStream("Thermo.db1.json");
using (var reader = new System.IO.StreamReader(stream))
{
    string data = reader.ReadToEnd();
    CompoundProps props = JsonConvert.DeserializeObject<CompoundProps>(data);
    Console.WriteLine(props.name);
}

Но у меня ошибка:

"Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип 'Thermo.CompoundProps', потому что для этого типа требуется объект JSON (например, {" name ":" value "} ) для правильной десериализации. Чтобы исправить эту ошибку, либо измените JSON на объект JSON (например, {"name": "value"}), либо измените десериализованный тип на массив или тип, реализующий интерфейс коллекции ( например ICollection, IList), например List, который может быть десериализован из массива JSON. JsonArrayAttribute также может быть добавлен к типу, чтобы заставить его десериализоваться из массива JSON.

Где неверно код?

Ответы [ 3 ]

5 голосов
/ 09 мая 2020

Причина сбоя десериализации состоит в том, что вы пытаетесь десериализовать коллекцию CompoundProps как CompoundProps. Попробуйте заменить его на: List<CompoundProps> props = JsonConvert.DeserializeObject<List<CompoundProps>>();

3 голосов
/ 09 мая 2020

Я думаю, что вы пытаетесь десериализовать несколько CompoundProps из вашего JSON файла в один объект CompoundProps. Возможно, вам стоит попробовать десериализовать его до List<CompoundProps>.

0 голосов
/ 09 мая 2020

Я не вижу всего решения. Вы можете ввести это: Prinzipiell таким образом работает

var obj = JsonConvert.DeserializeObject(json);

public class ClassName {
    public string id { get; set; }
    public string language { get; set; }
    public string edition { get; set; }
    public string author { get; set; }
}

List list = JsonConvert.DeserializeObject> (json);

Это должно помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...