如何将JSON.Net中的JObject转换为T.

Tra*_*er1 21 c# json casting json.net

我知道我可以使用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);
Run Code Online (Sandbox Code Playgroud)

yam*_*men 37

首先将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>();
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • @Nuzzolilo答案涵盖问题中指定的情景(并在评论中澄清)令人满意,而不是一些假设的情景,你已经来了,并在5个月后添加.谢谢你的光临. (5认同)