是否可以根据单个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;
}
}
预期结果:
PS :
x和y取决于从json文件获得的数据。
我认为的解决方法是,创建一个包含Json数据片段的.txt文件,而不是创建一个json文件。然后,将.txt文件的内容保存到变量中。最后,从该变量中选择每个json数据片段以单独使用它们,就好像每个片段都是一个单独的json文件一样。
但是,这样做会有更简单的方法吗?
答案 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"
}
}