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

标签 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);

最佳答案

首先将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/

相关文章:

javascript - 如何避免为每个循环添加内部 Angular 重复记录?

c# - 从 C# 源文件中提取属性名称

c# - 如何将 UserControl 的 KeyBinding 传递给其父控件?

C# Linq Query group by 检查结果是否为空

java - 类型转换一个泛型类。 (种姓)和 Class.cast()

c++ - C++ 强制转换是如何实现的?

c - 为什么二维数组可以从 int ** 转换为 int * ,而指针数组却不能

c# - 向应用程序用户发送通知/请求(Facebook - C#)

ios - 在 SWIFT 中为 JSON 格式制作字符串(包括 TextView 中的换行符)的最佳方法是什么?

javascript - 用 JS 读取本地 XML