将JSON反序列化为Disctionary对象

时间:2017-01-31 12:13:22

标签: c# json json.net

鉴于

{
    "0": [
        "508",
        "New Form",
        "New Form",
        "SMART", {
            "0": [
                "1",
                "true"
            ],
            "1": [
                "1",
                "true",
                "3",
                "true"
            ],
            "2": [
                "1",
                "true",
                "3",
                "true",
                "5",
                "true"
            ]
        }
    ],
    "1": [
        "187",
        "UserAccess",
        "UserAccess",
        "User Access to Smart", {
            "0": [
                "1",
                "true"
            ]
        }
    ]
}

我希望用

反序列化
var _gridData = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string[]>>(griddata); 

但它给了我:

  

读取字符串时出错。意外的令牌:StartObject。路径'0 [4]',第1行,第48位。

3 个答案:

答案 0 :(得分:0)

问题在于您没有反序列化有效的Dictionary<string, string[]>对象,您的对象实际上是Dictionary<string, object[]>,因为例如索引data[0][3]您有Dictionary<string, string[]> 1}}

答案 1 :(得分:0)

您的json不是字典,您的值不仅仅是字符串,而是对象。 你可以用这种方式反序列化:

var ret = JsonConvert.DeserializeObject<Dictionary<string, object[]>>(json);

它不会抛出异常,但是你必须决定如何处理结果:

enter image description here

答案 2 :(得分:0)

string[] =&gt; object[],因为最后一个元素不是一个对象,不是一个字符串。

var _gridData = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object[]>>(griddata);