繁体   English   中英

用Json文件填充列表

[英]Populate List with Json file

我有一个物品清单。 Item是具有多个构造函数的对象,因此可以多种形式创建一个Item。

具有两个构造函数的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;}
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM