使用 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 类。

我无法找出为什么会发生这种情况以及如何解决此类问题。

使用 JSON 文件填充列表

您可以使用

properties而不是常规字段和构造函数初始化。

public class Item
{
    public string name {get;set;}
    public int age {get;set;}
    public int anotherNumber {get;set;}
}

因此,您将介绍这两种反序列化情况。