我该如何写这样的东西?
string json = null;
Type[] types = Assembly.GetExecutingAssembly().GetTypes();
var carTypes = (from type in types
where type.IsClass && type == typeof(Car)
select type);
foreach(var carType in carTypes )
{
string typeName = carType .Name;
string jsonFile = typeName + ".json";
json = File.ReadAllText(jsonFile);
// How can I not hardcode "Porche" here and instead use "carType"?
IList<Porche> cars = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Porche>>(json);
}
在这里,保时捷是Car的子类-“ Porche”和“ Car”都是Class。除了保时捷,我们还有Toyata,宝马,特斯拉...我想通过反射来动态检索它们(避免硬编码)
“汽车”是汽车实例的列表。
“ carType”是类型。
如何在以List为参数的JsonConvert.DerserializeObject中使用“ carType”?
IList<someReflectionAPI(carType)> cars = Newtonsoft.Json.JsonConvert.DeserializeObject<List<someReflectionAPI(carType)>>(json);
谢谢
最佳答案
您可以在运行时使用MakeGenericType创建通用类型,并使用DeserializeObject
的非通用重载:
var listOfType = typeof(List<>).MakeGenericType(carType);
var cars = JsonConvert.DeserializeObject(json, listOfType);