我知道我可以使用 JsonConvert.DeserializeObject<T>(string)
, 但是,我需要查看对象的 _type
(可能不是第一个参数)以确定要转换到的特定类。本质上,我想做的是:
//Generic JSON processor for an API Client.
function MyBaseType ProcessJson(string jsonText)
{
var obj = JObject.Parse(jsonText);
switch (obj.Property("_type").Value.ToString()) {
case "sometype":
return obj.RootValue<MyConcreteType>();
//NOTE: this doesn't work...
// return obj.Root.Value<MyConcreteType>();
...
}
}
...
// my usage...
var obj = ProcessJson(jsonText);
var instance = obj as MyConcreteType;
if (instance == null) throw new MyBaseError(obj);
最佳答案
首先将JSON解析为JObject。然后查找 _type
使用 LINQ to JSON 的属性。然后根据值切换并使用 ToObject<T>
进行转换:
var o = JObject.Parse(text);
var jsonType = (String)o["_type"];
switch(jsonType) {
case "something": return o.ToObject<Type>();
...
}
关于c# - 如何将 JSON.Net 中的 JObject 转换为 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10218827/