我知道我可以使用JsonConvert.DeserializeObject<T>(string),但是,我需要窥视对象的_type(可能不是第一个参数),以确定要转换的特定类。本质上,我想做的是这样的:
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>:
ToObject<T>
var o = JObject.Parse(text); var jsonType = (String)o["_type"]; switch(jsonType) { case "something": return o.ToObject<Type>(); ... }