【问题标题】:JSON.NET - deserialize JSON into object, which class type is in inner fieldJSON.NET - 将 JSON 反序列化为对象,该类类型在内部字段中
【发布时间】:2012-07-04 01:19:12
【问题描述】:

通常我们通过这段代码使用 JSON.NET 反序列化

JsonConvert.DeserializeObject<CLASS TYPE> (text, settings);

想象一下,我们有这样的 JSON 请求:

{
  "command" : "register_user",
  "params" : {
    "@c" : "register_params",
    "name" : "sdfsd",
    "email" : "sdfsd@ddkdk",
    "password" : "JDFffJJJd"
  }
}

我们如何自动检测到我们需要使用 JSON.NET 将“名称”、“电子邮件”和“密码”字段反序列化为一个 register_params 对象?

【问题讨论】:

  • 这 (stackoverflow.com/questions/9490345/…) 看起来是相关的,因为您使用 @c 就像 JSON.NET 通常使用 $type 一样。
  • 您能否提供使用此类元字段的示例链接?我找到了文章,它解释了不同的方式,但不是很有帮助:dotnetbyexample.blogspot.com/2012/02/…
  • JSON.NET 引入了一个 TypeNameHandling 值,可以通过两种方式使用;作为 JsonSerializerSettings 的参数。在您希望它应用到的属性的属性中,像这样[JsonProperty(TypeNameHandling = TypeNameHandling.All)]。它通过将 $type 写入 JSON 输出来工作。具体的文章我不知道,看james.newtonking.com/projects/json/help/…关于TypeNameHandling的解释。

标签: c# .net json serialization json.net


【解决方案1】:

使用 TypeName 值“$type”。

我已经写了两种方法来做到这一点:

//T can be an interface or a derived type
public static T DeserializeObject<T>(string json) where T : class
//Uses "$type" to determine the object
public static object DeserializeObject(string json)

来源: https://gist.github.com/ricjac/b84a1d550cfe469f3945

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    相关资源
    最近更新 更多