【问题标题】:Deserialize Json and store part of it into list of objects反序列化 Json 并将其部分存储到对象列表中
【发布时间】:2018-01-11 08:48:17
【问题描述】:

如何反序列化这个 Json 并在 SampleClass 列表中保存所有 DatafieldHeaderText

 public class SampleClass
{
    public string Datafield { get; set; }
    public string HeaderText { get; set; }
}

{
    "SummaryResults": {
      "ControlType": "Table",
      "ColumnDefinitions": [
        {
          "Datafield": "SourceSystem",
          "HeaderText": "Source System"
        },
        {
          "Datafield": "ChildHoldType",
          "HeaderText": "Child Hold Type"
        },
        {
          "Datafield": "CompanyNumber",
          "HeaderText": "Company Number"
        },
        {
          "Datafield": "Queue",
          "HeaderText": "Queue"
        },
        {
          "Datafield": "Country",
          "HeaderText": "Country"
        },
        {
          "HeaderText": "Count",
          "ControlDefinition": {
            "ControlType": "Hyperlink",
            "DisplayText": "@{Count}",
            "URL" :  ""
          }
        }
      ]
    }
}

【问题讨论】:

  • 你已经尝试了什么?我希望您至少了解序列化的基础知识,尤其是 JSON。因此,通过提供您的代码来显示确切您遇到困难的地方。
  • 你不能。最后一个数组条目不适合 SampleClass。

标签: c# json json.net deserialization


【解决方案1】:

使用 Json.Net 的 LINQ-to-JSON API 很容易做到这一点:

List<SampleClass> list = JToken.Parse(json)
    .SelectToken("SummaryResults.ColumnDefinitions")
    .Children<JObject>()
    .Select(jo => jo.ToObject<SampleClass>())
    .ToList();

但是,请注意 JSON 数组中的最后一项没有 Datafield,因此它在结果列表中将为空。

小提琴:https://dotnetfiddle.net/9dl2wP

【讨论】:

  • 感谢您的解决方案
猜你喜欢
  • 2017-08-15
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 2017-12-10
相关资源
最近更新 更多