我有类似的问题。
deserialize list of objects using json.net
通常,我们在下面确实喜欢反序列化对象列表。但就我而言,我无法对List<Category>
进行硬编码,因为我不知道类型是什么。
JsonConvert.DeserializeObject<List<Category>>(response.dtosString)
json中将有一个属性,该属性将为我提供类型名称,以便我可以创建如下所示的类型
string typename = string.Format("{0}, ABC.EDF", myresponse.dtoType);
Type resultType = Type.GetType(typename);
现在我要使用下面的类似内容
JsonConvert.DeserializeObject<List<typename>>(myresponse.dtosString)
我在下面尝试了一下,但没有用,因为它说动态不能被转换并且需要显式的转换逻辑。
Deserializing an unknown type in JSON.NET
解决方案::感谢克里斯为我指出了正确的方向。
这就是我所做的
string typename = string.Format("{0}, ABC.EDF", myresponse.dtoType);
Type resultType = Type.GetType(typename);
var listType = typeof(List<>);
Type constructedListType = listType.MakeGenericType(resultType);
var myData = Newtonsoft.Json.JsonConvert.DeserializeObject(myresponse.dtosString, constructedListType);
此后,我仅将myData提供给第三方库中的读取函数,该函数我无权访问并处理数据。
答案 0 :(得分:1)
有一个接受Type
对象的重载。要构造您的类型的列表,您需要执行以下操作:
var constructedListType = typeof(List<>).MakeGenericType(resultType);
var listType = Activator.CreateInstance(constructedListType);
然后,您只需要使用适当的反序列化重载即可:
var myList = JsonConvert.DeserializeObject(myresponse.dtosString, listType);
值得注意的是,myList的类型为Object,没有简单的方法可以对其进行强类型化。根据您需要执行的操作,这可能没问题,或者您可能需要使用dynamic
才能进一步使用它。