2017-04-20 110 views
0

假設下面多single-dimensional JSON陣列:反序列化一維數組JSON C#

{ 
    "F" : [ "FG3D2", "FG492", "FG4Q2", "FG562", "FG5Y2", "FG6C2" ], 
    "M" : [ "MG3D2", "MG492", "MG4Q2", "MG562", "MG5Y2", "MG6C2" ], 
    "N" : [ "NG3D2", "NG492", "NG4Q2", "NG562", "NG5Y2", "NG6C2" ], 
    "P" : [ "PG3D2", "PG492", "PG4Q2", "PG562", "PG5Y2", "PG6C2" ] 
} 

什麼是可以用來反序列化相應的類設計?使用JSON.Net和JavascriptSerializer()進行反序列化時,反序列化爲Dictionary<string, List<string>>,但我似乎無法找到與此等效的適當類。下面

是一流的設計我試圖與鹼的反序列化,但未能:

public class Element 
{ 
    public string Key { get; set; } 
    public List<string> Value { get; set; } 
} 

感謝。

+0

你需要改變你的json,你想'{Key:「F」,Value:[]}' – Liam

+0

但我該如何對齊它,以便類適應json?而不是適應類的json。 – Nii

+1

順便說一句,這是一個JSON到POCO代的有用工具:[http://json2csharp.com/](http://json2csharp.com/)。不完美,但它對實驗目的有好處。 –

回答

-1

我想你可以創建從字典中繼承的類:

public class Element : Dictionary<string, List<string>> 
{ } 
+0

這與他說他不想要的基本相同嗎? – Liam

0

真的是你需要改變你的JSON。目前的情況是,你需要一類像

public class Element 
{ 
    public List<string> F {get; set;} 
    public List<string> M {get; set;} 
    .... 
} 

要填充現有的類結構的JSON應該是:

[ 
    {"Key":"F", "Value":["FG3D2", "FG492", "FG4Q2", "FG562", "FG5Y2", "FG6C2" ]}, 
    {"Key":"M", "Value":["MG3D2", "MG492", "MG4Q2", "MG562", "MG5Y2", "MG6C2"]}, 
] 

這使得更多的意義,我比你有什麼樣的時刻

+0

雖然它確實有道理,但json值是在一個單獨的api上預處理的,我沒有任何控制權。這就是爲什麼,我正在尋找一種讓我的課程適應的方法。 – Nii

+0

這很好,所以你想第一個選項,然後 – Liam

0

你必須改變你的JSON來完成這項工作。你必須讓鍵/值對的列表:

[ 
    { 
     "Key": "F", 
     "Value": [ "FG3D2", "FG492", "FG4Q2", "FG562", "FG5Y2", "FG6C2" ] 
    }, 
    { 
     "Key": "M", 
     "Value": [ "MG3D2", "MG492", "MG4Q2", "MG562", "MG5Y2", "MG6C2" ]   
    }, 
    { 
     "Key": "N", 
     "Value": [ "NG3D2", "NG492", "NG4Q2", "NG562", "NG5Y2", "NG6C2" ] 
    }, 
    { 
     "Key": "P", 
     "Value": [ "PG3D2", "PG492", "PG4Q2", "PG562", "PG5Y2", "PG6C2" ] 
    } 
] 

然後你可以如下把它轉換:

var result = JsonConvert.DeserializeObject<List<RootObject>>(json); 

其中RootObject是:

class RootObject 
{ 
    public string Key { get; set; } 
    public List<string> Value { get; set; } 
} 
0

這個怎麼樣:

var dic = JsonDeserializer<Dictionary<string, List<string>>>(json); 

    var els = new List<Element>(); 
    foreach(var k in dic.Keys) 
    { 
     els.Add(new Element { Key = k, Value = dic[k] }); 
    } 

現在你有你想要的對象。

+0

這樣做的缺點是你必須迭代顯然不是很有效的結果。 – Liam

+0

你是對的。但我不認爲有一種方法可以將你的json直接轉換爲你想要的。他們基本上是兩個不同的對象 – David