我可以使用单个json文件创建n个不同类的实例吗?

时间:2019-02-10 18:15:18

标签: c# json class

是否可以根据单个json文件中的数据创建(从下面的示例中)假设2个Animal实例和3个Flower实例?

示例代码:

class Nature
{
    // do something with a specific json file
    class Animal
    {
        string id;
        bool isMammal;
    }

    class Flower
    {
        string id;
        int numberOfPetals;
    }
}

预期结果:

  • x数量的Animal实例
  • y个Flower实例的数量

PS

x和y取决于从json文件获得的数据。

我认为的解决方法是,创建一个包含Json数据片段的.txt文件,而不是创建一个json文件。然后,将.txt文件的内容保存到变量中。最后,从该变量中选择每个json数据片段以单独使用它们,就好像每个片段都是一个单独的json文件一样。

但是,这样做会有更简单的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用JSON结构代替维护计数。

{
   "AnimalCollection" :
            [
                 { "id":"Animal-1", "IsMammal":true },
                 { "id":"Animal-2", "IsMammal":true },
                 { "id":"Animal-3", "IsMammal":true }
            ],
    "FlowerCollection":
            [
                 { "id":"Flower-1", "numberOfPetals":30 },
                 { "id":"Flower-2", "numberOfPetals":20 },
                 { "id":"Flower-3", "numberOfPetals":10 },
                 { "id":"Flower-4", "numberOfPetals":3 }
            ]
}

然后您可以使用newtonsoft.json将其反序列化为以下类型

public class Data
{
    public Animal[] AnimalCollection {get;set;}
    public Flower[] FlowerCollection{get;set;
}

它将包含JSON中的3个动物实例和4个花实例。

希望这会有所帮助。

答案 1 :(得分:0)

您可以加载JSON文件并将数据转换为数据表。创建动物和花卉的新列表。

c#代码如下:

//Declare typed list of Animals
            List<Animal> AllAnimals = new List<Animal>();

            //Declare typed list of Flowers
            List<Flower> AllFlowers = new List<Flower>();
            DataTable dt;
            //Load JSON file data
            using (StreamReader r = new StreamReader(JSONFilePath))
            {
                string json = r.ReadToEnd();
                //convert JSON data to datatable
                dt = (DataTable)JsonConvert.DeserializeObject(json, (typeof(DataTable)));
            }
           foreach(DataRow row in dt.Rows)
            {
                if (row[1].ToString() == "Animal")
                {
                    Animal NewAnimal = new Animal();
                    NewAnimal.id = row[0].ToString();
                    NewAnimal.isMammal = row[2].ToString();
                    AllAnimals.Add(NewAnimal);
                }
                else
                {
                    Flower NewFlower = new Flower();
                    NewFlower.id = row[0].ToString();
                    NewFlower.numberOfPetals = row[3].ToString();
                    AllFlowers.Add(NewFlower);
                }
            }

以下是可以从文件加载的json数据示例:

{
    {
   "id": "0",
   "EntryType": "Animal",
   "IsMamal": "True",
   "numberOfPetals": ""
 },
 {
   "id": "1",
   "EntryType": "Animal",
   "IsMamal": "True",
   "numberOfPetals": ""
 },
 {
   "id": "2",
   "EntryType": "Flower",
   "IsMamal": "",
   "numberOfPetals": "8"
 },
 {
   "id": "1",
   "EntryType": "Flower",
   "IsMamal": "",
   "numberOfPetals": "6"
 },
 {
   "id": "2",
   "EntryType": "Flower",
   "IsMamal": "",
   "numberOfPetals": "10"
 }
}