【问题标题】:JSON deserialization returns {null,null} for KeyValuePairJSON 反序列化为 KeyValuePair 返回 {null,null}
【发布时间】:2018-10-04 04:20:22
【问题描述】:

我已经在 J​​SON 中声明了以下键:值对:

"saleParameters": [
        {"saleName":"FlashSale2018"},
  ]

我在合同类中使用以下属性映射上述内容:

    [JsonProperty("saleParameters")]
    public IEnumerable<KeyValuePair<string,string>> SaleParameters { get; set; }

但由于某种原因,我在反序列化后总是在 SaleParameters 中收到空值。我正在使用 NewtonSoft.JSON 进行 JSON 序列化/反序列化,代码在 .net 核心上运行。

知道为什么会发生这种情况以及如何解决这个问题吗?

【问题讨论】:

  • Clue。 SaleParameters 的键是唯一的吗?
  • 对不起,我没听懂。如果它在那个编辑器中工作,为什么它不能使用上述格式?

标签: c# generics .net-core json.net


【解决方案1】:

问题是你的current code expects JSON like this:

"saleParameters": [
    {"Key": "saleName", "Value": "FlashSale2018"}]
]

您应该改用字典:

public IEnumerable<IDictionary<string,string>> SaleParameters { get; set; }

这将反序列化“saleName”作为键和“FlashSale2018”作为值。而且,如果你真的需要IEnumerable&lt;KeyValuePair&lt;string, string&gt;&gt;,可以拨打SaleParameters.SelectMany(p =&gt; p). ToEnumerable()

【讨论】:

  • 其实由于外层JSON容器是一个数组,所以需要public IEnumerable&lt;Dictionary&lt;string,string&gt;&gt; SaleParameters { get; set; }。然后你可以SaleParameters.SelectMany(d =&gt; d).ToList(); 得到一个平面列表。
  • @dbc 哎呀。是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多