【问题标题】:How I can deserialize Json into Dictionary<String,List<String>>如何将 Json 反序列化为 Dictionary<String,List<String>>
【发布时间】:2017-01-15 23:04:42
【问题描述】:

我有一个示例 Json

[{"_2":["HR Data","Reformed (Master File)"]}]

我正在尝试将其反序列化为以下模型

public class ExploreCriteria
    {
        public Dictionary<String, List<String>> Explore { get; set; }
    }

这是我迄今为止尝试过的

ExploreCriteria Explore = new ExploreCriteria();
Explore = JsonConvert.DeserializeObject<ExploreCriteria>(JsonStr);

但它说

Cannot deserialize the current JSON array (e.g. [1,2,3]) into type
'DataModels.ExploreCriteria' because the type requires a JSON object
(e.g. {"name":"value"}) to deserialize correctly.

【问题讨论】:

  • 您是否尝试过反序列化为ExploreCriteriaExploreCriteria[] 的数组?因为你的 JSON 中最外层的东西是一个数组。
  • 试试var explore = JsonConvert.DeserializeObject&lt;Dictionary&lt;String, List&lt;String&gt;&gt;&gt;(JsonStr)

标签: c# json asp.net-mvc-5 json.net


【解决方案1】:

提供的 JSON 和您的 ExploreCriteria 类没有描述相同的结构。

您的 JSON 结构是一个数组,其中包含一个带有数组值的键。所以你可以删除方括号来

{"_2":["HR Data","Reformed (Master File)"]}

那么你的ExploreCriteria 是合适的。或者您可以将 JsonConvert 调用更改为

var JsonStr = "[{\"_2\":[\"HR Data\",\"Reformed(Master File)\"]}]";
ExploreCriteria Explore = new ExploreCriteria();
var data = JsonConvert.DeserializeObject<IEnumerable<Dictionary<String, List<string>>>>(JsonStr);
Explore.Explore = data.FirstOrDefault();

【讨论】:

  • @AdilWaqar - 抱歉,Explore 属性不合适。我已经编辑了代码,使其适合您的“ExploreCriteria”。
【解决方案2】:

List<KeyValuePair<string, List<string>>> uploadedfiles = JsonConvert.DeserializeObject<List<KeyValuePair<string, List<string>>>>(json);

使用键值对类代替字典。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多