Десериализовать данные JSON в список в C # - PullRequest
0 голосов
/ 03 мая 2019

После нескольких часов поисков и попыток, кто-то может быть так любезен и помочь мне решить следующую простую проблему:

У меня есть следующая строка JSON:

[
    {
        "key": 1234,
    },
    {
        "key": 9876,
    }
]

Как мне прочитать этот JSON и записать все значения в список?

Было много попыток, но смотрите следующий код:

List<int> content = new List<int>;
var json = reader.ReadToEnd();

var obj = JObject.Parse(json);                    

Первая попытка:

foreach(var key in obj)
{
    content.Add((int)obj["key"]);
}

Другая попытка:

var token = obj.SelectToken("key");

foreach(var item in token)
{
   content.Add(JsonConvert.DeserializeObject<int>(item.value));
}

Или что-то в этом роде?

foreach(var key in obj)
{
    content.Add(Int32.Parse(obj.GetValue("key").ToString()));
}

Пытаясь запустить последнюю попытку, я получаю следующее сообщение об ошибке: Error reading JObject from JsonReader. Current JsonReader item is not an object: StartArray. Даже если JSON выглядит следующим образом:

[{\"key\":9999},{\"key\":9876}]

Был бы очень рад за каждый ответ.

С уважением

Ответы [ 3 ]

1 голос
/ 03 мая 2019

Использовать Newtonsoft.Json

Это можно сделать следующим образом:

    List<string> yourList = JsonConvert.DeserializeObject(YourJson).ToList();

ПРИМЕЧАНИЕ. Его можно сохранить только в виде списка строк,но можно вызвать с помощью: yourList.YourKeyName.

0 голосов
/ 03 мая 2019

Следуя сказанному @bolkay, вам нужно определить свой объект:

public class KeyClass
{
    public int Key { get; set; }
}

и затем, если ваш JSON находится в переменной с именем jsString, например

        List<int> content = new List<int>();
        var keys = JsonConvert.DeserializeObject<List<KeyClass>>(jsString);
        foreach (var item in keys)
        {
            content.Add(item.Key);
        }
0 голосов
/ 03 мая 2019

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

public class RootObject
{
    public int key { get; set; }
}

Затем вы можете десериализовать вашу строку json следующим образом:

string json=reader.ReadToEnd();

List<RootObject> myobs=JsonConvert.DeserialiseObject<List<RootObject>>(json);

Затем вы можете делать вещи со списком.

foreach(var ob in myobs){
Console.WriteLine(ob.key);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...