【问题标题】:Deserialize JSON to C# Objects with Childs使用 Childs 将 JSON 反序列化为 C# 对象
【发布时间】:2018-07-25 11:08:41
【问题描述】:

我有一个 JSON 字符串,我需要一些帮助来反序列化它。 目前我的结果始终为空。

var results = JsonConvert.DeserializeObject<Root>(json);
// result == null

我的 JSON:

{"First":{"FirstData1":{"date":"2018-01-01","hint":""},
"FirstData2":{"date":"2018-01-06","hint":""}},
"Second":{"SecondData1":{"date":"2018-01-01","hint":""},
"SecondData2":{"date":"2018-01-06","hint":""}}}....

只有在最后一个节点上才有实际的属性命名...

我的对象

public class Root
{
    public IEnumerable<TempModelRoot> Value{ get; set; }
}

public class TempModelRoot
{
    [JsonProperty("Key")]
    public string Key { get; set; }

    [JsonProperty("Value")]
    public List<TempModelChild> Value { get; set; }
}

public class TempModelChild
{
    [JsonProperty("Key")]
    public string Key { get; set; }

    [JsonProperty("Value")]
    public TempModelInfo Value { get; set; }
}


public class TempModelInfo
{
    [JsonProperty("date")]
    public string date { get; set; }

    [JsonProperty("hint")]
    public string hint { get; set; }
}

【问题讨论】:

  • 尝试将您的 json 插入 Quick type model generator 并查看您的模型与生成的模型相比如何。
  • 我认为这是由于动态键(“First”、“Second”、“FirstData1”、“FirstData2”等)。您可以尝试在此问题中看到的使用 Dictionary 的建议:stackoverflow.com/questions/13517792/…
  • 您的课程与提供的 json 不匹配。例如,Root 不是 IEnumerable。
  • @MXD 好链接!直接进入我的最爱,谢谢!
  • @MXD 为我工作。谢谢

标签: c# json json-deserialization


【解决方案1】:

除了@MX D 的回答,我想添加两个更有用的模型生成器站点,它们将 JSON 作为输入并提供适当的模型类。

Json2Csahrp

JsonUtils

在您发现难以生成复杂的模型类时使用。

【讨论】:

    【解决方案2】:

    您尝试反序列化的模型与基于 json 本身的实际预期模型很可能不匹配。

    解决此问题的一种简单方法是使用 Quick Types Model Generator(unafiliated) 等工具,该工具允许您根据提供的 json 文件生成 C# 模型。

    生成后,您可以将模型与生成的模型进行比较和/或替换。 发现并解决模型的问题。

    【讨论】:

      猜你喜欢
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多