如何反序列化JSON-Object?

时间:2014-07-09 13:43:34

标签: c# .net json serialization

我正在尝试反序列化一个看起来非常类似于Array的JSON-Object。 这是JSON-String:

...,"Test":[[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14]],...

我不想将其反序列化为2D数组,因为这些值中的每一个对我都有明确的含义。我想这样访问它:

Test[0].Example (0)
Test[0].Êxample2 (1)
Test[0].Example3 (2)
...
Test[2].Example (10)

我希望你能得到这个想法并解决我的问题。

我正在使用Newtonsoft JSON Library和C#。

EDIT1: 也许我应该更具体地说明直到现在如何进行去除污染:

JSON:"Object":{"A":0,"Test":[[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14]],"B":1,...}

C#:

m_Object = JsonConvert.DeserializeObject<Object>(jsonString);

类对象在C#中定义,包含JSON-String的所有字段。

对象的类:

class Object
{
public Int32 A {get;set;}

public Object Test {get;set;}

public Int32 B {get;set;}
}

1 个答案:

答案 0 :(得分:1)

您可以使用LINQ to JSON:

string json = "[[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14]]";

var tests = JsonConvert.DeserializeObject<JArray>(json)
    .Cast<JArray>()
    .Select(a => new Test { 
         Example = (int)a[0],
         Example2 = (int)a[1]
         // etc
    });

结果:

enter image description here

更新:对于您更新的问题 - 您可以反序列化json对象,然后通过其键访问其属性

string json = @"{'A':0,'Test':[[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14]],'B':1}";

var obj = JsonConvert.DeserializeObject<JObject>(json);
var test = (JArray)obj["Test"];
var result = new {
    A = (int)obj["A"],
    B = (int)obj["B"],
    Test = test.Cast<JArray>().Select(a => new Test {
        Example = (int)a[0],
        Example2 = (int)a[1],
        Example3 = (int)a[2],
        Example4 = (int)a[3],
        Example5 = (int)a[4]
    })
};