使用 JSON 文件填充列表
本文关键字:列表 填充 文件 JSON 使用 | 更新日期: 2023-09-27 18:32:20
>我有一个项目列表。Item 是具有多个构造函数的对象,因此可以以多种形式创建项。
具有两个构造函数的类项的示例。
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;
}
如果我在 Item 类中只有一个构造器(例如接受 2 个参数的构造函数),则此方法工作正常,我可以填充列表。但是,当我在类 Items 中添加第二个构造函数时(因为我也希望能够读取具有第三个属性的 Json 文件。
例:-
[{"name":"Joseph","age":25, "anotherNumber": 12},{"name":"Peter","age":50, "anotherNumber": 12}]
ReadJsonObj 方法失败,出现错误"找不到用于 Item 类型的构造函数"。我可以通过创建多个类 Item (例如 ItemA、ItemB)来解决此问题,一个类接受三个变量,另一个类接受两个变量。但是,我只想有一个 Item 类。
我无法找出为什么会发生这种情况以及如何解决此类问题。
您可以使用
properties
而不是常规字段和构造函数初始化。
public class Item
{
public string name {get;set;}
public int age {get;set;}
public int anotherNumber {get;set;}
}
因此,您将介绍这两种反序列化情况。