Проблемы с Json C#
Знаю что есть куча подобных вопросов, но к сожалению не смог на их примере исправить ошибку у меня.
Выбрал json файл в качестве формата для хранения введенных данных пользователем. он выглядит след. образом:
[{"login": "", "password": "", "steam_id": "", "in_list": "", "api_key": ""}, {"login": "", "password": "", "steam_id": "", "in_list": "", "api_key": ""}]
Внутри "" лежат данные соответственно и таких элементов много(в примере оставил 2)
Классы с описанием элементов:
namespace Controll_prjct
{
public class Rootobject
{
public Class1[] Property1 { get; set; }
}
public class Class1
{
public string login { get; set; }
public string password { get; set; }
public string steam_id { get; set; }
public string in_list { get; set; }
public string api_key { get; set; }
}
}
То как я пытаюсь достать данные из json файла:
string jsonFile = File.ReadAllText(@"path to file");
Class1 data = JsonConvert.DeserializeObject<Class1>(jsonFile);
Console.WriteLine(data);
Ну и ошибка соответственно:
Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'Elysium_prjct.Class1' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.
Path '', line 1, position 1."
Я и мои мешки под глазами будем очень благодарны если поможете исправить ошибку!
Если еще объясните почему, то отдельный поклон.
Ответы (2 шт):
Rootobject data = JsonConvert.DeserializeObject<Rootobject>(jsonFile);
Поскольку в JSON файле находится массив объектов попробуйте изменить свой код десереализации на следующий:
List<Class1> data = JsonConvert.DeserializeObject<List<Class1>>(jsonFile);
Для вывода элементов массива можете воспользоваться циклом в данном случае вполне подойдет foreach:
foreach(var element in data)
{
Console.WriteLine(element);
}
По-умолчанию метод ToString() у типа List выводит название типа. Поэтому лучше выводить поэлементно. При этом в классе Class1 необходимо будет переопределить метод ToString(). Ещё как вариант в цикле выводить все поля отдельно, т. е. Console.WriteLine(element.login);
Надеюсь это поможет.