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



我知道我可以使用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。然后使用 LINQ to JSON 查找 _type 属性。然后根据值进行切换,并使用ToObject<T>进行转换:

var o = JObject.Parse(text);
var jsonType = (String)o["_type"];
switch(jsonType) {
    case "something": return o.ToObject<Type>();
    ...
}
JSON.NET 没有

直接的能力来支持这两个条件:

  • 保存类型名称的属性的自定义名称
  • 在对象中的任何位置查找属性

第一个必要条件由 JsonSubType 满足第二个通过指定 thh 权限元数据属性处理

相关内容

  • 没有找到相关文章

最新更新