Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以使用一个json文件创建n个不同类的实例吗?_C#_Json_Class - Fatal编程技术网

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

C# 我可以使用一个json文件创建n个不同类的实例吗?,c#,json,class,C#,Json,Class,可以根据下面的示例创建2个Animal实例和3个Flower实例(基于单个json文件的数据) 示例代码: class Nature { // do something with a specific json file class Animal { string id; bool isMammal; } class Flower { string id; int numberOfP

可以根据下面的示例创建2个Animal实例和3个Flower实例(基于单个json文件的数据)

示例代码:

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

    class Flower
    {
        string id;
        int numberOfPetals;
    }
}
预期结果:

一个x数量的动物实例 花的大量实例 附言:

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

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


但是,它是否有一种更简单的方法呢?

您可以使用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个animal实例和4个flower实例


希望这有帮助。

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

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的教程。但是我只能找到一些基本的教程,这些教程展示了如何从json文件的数据实例化一个特定的类。但是我想要的是从单个json文件创建不同类的实例。正如我所说,我已经查找了各种教程、官方文档等,但我没有看到任何关于它的内容。那么,我应该假设这是不可能的吗?谢谢。如果我用我给出的例子来实现它,你的解决方案就会起作用。但不幸的是,情况并非如此^^^我打算实现此逻辑的代码将使用几十个类,每个类包含几十个或数百个变量。因此,很难在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"
 }
}