如何在c#中反序列化JSON对象

时间:2016-07-13 13:24:41

标签: c# list dictionary

我有以下JSON代码,

{
    "dataContainer":{
    "sheets":{
        "1":{
            "0":{
                "1":{
                    "type":6,
                    "value":2,
                    "value2":"11-15-1991"
                },
                "2":{
                    "type":10,
                    "value":3,
                    "value2":3
                }
            },
            "1":{
                "1":{
                    "type":6,
                    "value":7,
                    "value2":"11-16-1991"
                },
                "2":{
                    "type":10,
                    "value":8,
                    "value2":8
                }
            }
        },
        "2":{
            "0":{
                "1":{
                    "type":6,
                    "value":2,
                    "value2":"11-15-1991"
                },
                "2":{
                    "type":10,
                    "value":3,
                    "value2":3
                }
            },
            "1":{
                "1":{
                    "type":6,
                    "value":7,
                    "value2":"11-16-1991"
                },
                "2":{
                    "type":10,
                    "value":8,
                    "value2":8
                }
            }
        }
    }}
}

我需要反序列化该代码,我已经尝试过那个,

Dictionary<string,object> dict = ser.Deserialize<Dictionary<string, object>>(obj);
List<object> sheetObject = new List<object>();
sheetObject = ((Dictionary<string, object>)dict["dataContainer"]).Values.ToList();
public object sheets = new object();
sheets = sheetObject[0];

但这不起作用我希望能够像下面那样工作,

sheets[1][0][1].type

如何实现这个目标?

1 个答案:

答案 0 :(得分:0)

Json.NET是要使用的库。该库有一个函数,它将获取一个JSON字符串并返回一个表示JSON的“动态”变量。 语法是这样的:

dynamic dict = JsonConvert.DeserializeObject(YOUR_JSON_STRING);

您现在可以动态访问整个JSON树,例如:

dynamic sheetObject = dict.dataContainer.sheets;

要在任何给定级别迭代孩子,只需使用foreach:

foreach (dynamic child in sheetObject.Children()) { /* do something */ }