如何将Json反序列化为Dictionary <string,list <string>&gt;

时间:2016-09-08 06:16:55

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

我有一个示例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.

2 个答案:

答案 0 :(得分:4)

提供的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();

答案 1 :(得分:0)

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

使用键值对类代替字典。