gpt4 book ai didi

c# - json转c#反序列化

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:54 24 4
gpt4 key购买 nike

我正在寻找如何按颜色将汽车添加到某个列表中。这是 json 文件,我使用 json2csharp 生成类。

我想使用比检查每辆车及其颜色列表更好的方法。例如,如果我有 40 辆汽车,那就太可怕了。

json

    {
"cars":[
{
"bmw":{
"color":[
"blue",
"red"
]
},
"price":5
},
{
"audi":{
"color":[
"blue",
"yellow",
"white"
]
},
"price":7
},
{
"nil":"nil"
},
{
"peugeot":{
"color":[
"blue",
"red",
"yellow",
"orange"
]
},
"price":12
},
{
"ferrari":{
"color":[
"blue",
"yellow",
"orange"
]
},
"price":12
}
]
}

代码

public class Bmw
{
public List<string> color { get; set; }
}

public class Audi
{
public List<string> color { get; set; }
}

public class Peugeot
{
public List<string> color { get; set; }
}

public class Ferrari
{
public List<string> color { get; set; }
}

public class Car
{
public Bmw bmw { get; set; }
public int price { get; set; }
public Audi audi { get; set; }
public string nil { get; set; }
public Peugeot peugeot { get; set; }
public Ferrari ferrari { get; set; }
}

public class RootObject
{
public List<Car> cars { get; set; }
}

using (StreamReader r = new StreamReader("carDB.json"))
{
string json = r.ReadToEnd();

RootObject car = JsonConvert.DeserializeObject<RootObject>(json);

foreach(Car c in car.cars)
{

}

}

最佳答案

您可以通过使用 System.Reflection 库来实现它,这会在一定程度上增加性能损失,但我认为代码对性能不是关键的,所以您会没事的。

首先,你需要创建一个接口(interface):

public interface ICar
{
List<string> color { get; set;}
}

Car 类应该实现该接口(interface):

public class Bmw : ICar
{
public List<string> color { get; set; }
}

之后,您可以通过过滤掉实现ICar 接口(interface)类型的属性来遍历Car 对象。

RootObject root = JsonConvert.DeserializeObject<RootObject>(json);
foreach (var car in root.cars)
{
var carProperties = car.GetType().GetProperties().Where(p => typeof(ICar).IsAssignableFrom(p.PropertyType));
foreach (var carType in carProperties)
{
var c = carType.GetValue(car);
if (c != null)
{
var colors = ((ICar)c).color;
//Do your thing...
}
}
}

关于c# - json转c#反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43020708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com