У меня есть список предметов. Элемент - это объект с несколькими конструкторами, поэтому элемент может быть создан в нескольких формах.Список населенных пунктов с файлом Json
Пример класса Предмет с двумя конструкторами.
public class Item
{
public string name = "";
public int age= 0;
public int anotherNumber = 0;
public Item(string iName, int iAge)
{
name = iName;
age= iAge;
}
public Item(string iName, int iAge, int iAnotherNumber)
{
name = iName;
age= iAge;
}
}
У меня есть то файл JSON в виде: -
[{"name":"Joseph","age":25},{"name":"Peter","age":50}]
Я использую метод ниже, чтобы прочитать файл и заполнить список, используя Newtonsoft.Json API.
public List<Item> ReadJsonString()
{
List<Item> data = new List<Item>();
string json = File.ReadAllText("\\path");
data = JsonConvert.DeserializeObject<List<Item>>(json);
return data;
}
Если у меня есть только один constuctor в классе позиции (например, конструктор, который принимает 2 аргумента) этот метод работает отлично, и я могу заполнить список. Однако, когда я добавить второй конструктор в классе предметов (так как я хочу, чтобы иметь возможность также читать JSon файлы с третьим атрибутом ..
Пример: -
[{"name":"Joseph","age":25, "anotherNumber": 12},{"name":"Peter","age":50, "anotherNumber": 12}]
Метод ReadJsonObj с ошибкой " Не удалось найти конструктор для типа Item. » Я могу исправить эту проблему, создав несколько элементов класса (например, ItemA, ItemB), один из которых принимает три переменные, а другой - две переменные. Однако я хотел бы иметь только один класс предмета.
Я не могу понять, почему это происходит и как исправить такой вопрос.
Хорошо, но я также охватываю оба случая десериализации с помощью двух конструкторов? – user2307236
@ user2307236 при таком подходе вам вообще не нужны конструкторы. Свойства, которые не будут десериализоваться, получат значения по умолчанию (пустая строка для строки и 0 для int) –