2017-04-20 116 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