反序列化一维JSON数组C#
假设以下为多个反序列化一维JSON数组C#,c#,arrays,json,serialization,deserialization,C#,Arrays,Json,Serialization,Deserialization,假设以下为多个一维JSON数组: { "F" : [ "FG3D2", "FG492", "FG4Q2", "FG562", "FG5Y2", "FG6C2" ], "M" : [ "MG3D2", "MG492", "MG4Q2", "MG562", "MG5Y2", "MG6C2" ], "N" : [ "NG3D2", "NG492", "NG4Q2", "NG562", "NG5Y2", "NG6C2" ], "P" : [ "PG3D2", "PG492
一维JSON数组:
{
"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" ]
}
可以使用什么样的类设计来反序列化它?当反序列化为Dictionary
时,使用JSON.Net和JavascriptSerializer()进行反序列化是可行的,但我似乎找不到与之等效的适当类
下面是我尝试以反序列化为基础的类设计,但失败了:
public class Element
{
public string Key { get; set; }
public List<string> Value { get; set; }
}
公共类元素
{
公共字符串密钥{get;set;}
公共列表值{get;set;}
}
谢谢。我想您可以创建一个从字典继承的类:
public class Element : Dictionary<string, List<string>>
{ }
公共类元素:字典
{ }
您确实需要更改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" ]
},
{
"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);
这个怎么样:
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] });
}
var-dic=JsonDeserializer(json);
var els=新列表();
foreach(dic.键中的变量k)
{
添加(新元素{Key=k,Value=dic[k]});
}
现在您有了所需的对象。您需要更改json,您需要{Key:“F”,Value:[]}
但是如何对齐它以便类适应json?与json适应class.Btw不同,这是一个有助于json到POCO生成的工具:。虽然不完美,但对于实验来说还是不错的。你能把你的评论转换成答案吗?你真的救了我一天。这和他说他不想要的东西基本上是一样的吗?虽然这很有意义,但json值是在一个单独的api上预处理的,我对此没有任何控制权。这就是为什么,我在寻找一种方法,我的类将是一个适应。这是好的,所以你想要第一个选项,然后缺点是,你必须迭代的结果,这显然是不是很有效。你是对的。但我认为没有办法直接将json转换为所需的json。它们基本上是两个不同的物体。
class RootObject
{
public string Key { get; set; }
public List<string> Value { get; set; }
}
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] });
}