2016-09-08 46 views
0

我有一個樣品的Json我如何反序列化JSON轉換成詞典<字符串,列表<String>>

[{"_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. 
+0

您是否試過對'ExploreCriteria',ExploreCriteria []'數組進行反序列化?因爲你的JSON中最外層的東西是一個數組。 – ZoolWay

+0

與此類似 http://stackoverflow.com/questions/17762032/cannot-deserialize-the-current-json-array-eg-1-2-3-into-type –

+0

嘗試'var explore = JsonConvert.DeserializeObject < Dictionary >>(JsonStr)' – adiga

回答

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(); 
+0

通過更改JsonConvert調用嘗試,但它在探索中顯示爲空... –

+1

@AdilWaqar - 抱歉Explore屬性不適合。我編輯了代碼,以便它適合您的'ExploreCriteria'。 –

+0

是的,它的工作感謝:) –

相關問題