【问题标题】:using newtonsoft, how to deserialize without knowing the type till run time?使用 newtonsoft,如何在不知道类型的情况下反序列化直到运行时?
【发布时间】:2016-06-01 16:20:10
【问题描述】:

所以后续工作正常,从字符串 json 给我一个 Team 对象:

var found = JsonConvert.DeserializeObject<Team>(json);

但是如果我直到运行时才知道类型怎么办?假设我有上面的字符串 json,但我还有另一个类型名称的字符串?例如,这不起作用:

var found = JsonConvert.DeserializeObject(json, Type.GetType("Team"));

无法将“Newtonsoft.Json.Linq.JArray”类型的对象转换为类型...

【问题讨论】:

  • 可以用模板版吗? JsonConvert.DeserializeObject&lt;T&gt;(json)
  • 直到运行时我才知道 T。我有一个字符串告诉我要反序列化的类型。
  • 如果你有一个 JArray,它不会是一个对象 - 你可能需要为你的类型构建一个 IEnumerable 类型。

标签: json json.net


【解决方案1】:

这对我有用:

var type = Type.GetType("My.Namespace.Class");
var myObj = JsonConvert.DeserializeObject(item, type);

诀窍是通过提供正确的类名来确保type 不为空。如果是,反序列化仍然可以工作,但输出不会是您想要的类型。有关GetType 的更多信息,请参阅MSDN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 2018-01-11
    • 2012-11-21
    • 1970-01-01
    • 2013-01-27
    • 2016-07-19
    • 1970-01-01
    相关资源
    最近更新 更多