C# 使用JsonConvert将JSON转换为dict

C# 使用JsonConvert将JSON转换为dict,c#,C#,我正在访问JSON格式的API调用中的数据。我正试着把它放在一个目录里,这样我就可以访问数据了。这非常适用于简单的JSON对象,但对于“解析值时遇到意外字符:[.Path'cluster_functions',第1行,位置539”的嵌套对象无效 我的JSON: { "id": "xxxxx", "uuid": "xxxxx", "cluster_incarnation_id": 151013752, "cluster_functions": ["NDFS"], "is_lts": true, "

我正在访问JSON格式的API调用中的数据。我正试着把它放在一个目录里,这样我就可以访问数据了。这非常适用于简单的JSON对象,但对于“解析值时遇到意外字符:[.Path'cluster_functions',第1行,位置539”的嵌套对象无效

我的JSON:

{
"id": "xxxxx",
"uuid": "xxxxx",
"cluster_incarnation_id": 151013752,
"cluster_functions": ["NDFS"],
"is_lts": true,
"num_nodes": 4,
"block_serials": ["17xxx"],
"ntp_servers": ["172.26.140.50", "ntp.xxx.be"],
"service_centers": [],
"http_proxies": [],
"rackable_units": [{
    "id": 23,
    "rackable_unit_uuid": "09f211d1-8fb4-xxxx-86e2-ce819xxxx29",
    "positions": ["1", "2", "3", "4"],
    "nodes": [6, 7, 8, 9]
}],
"public_keys": [],
"smtp_server": null,
"hypervisor_types": ["kKvm"],
"cluster_redundancy_state": {
    "current_redundancy_factor": 2,
    "desired_redundancy_factor": 2,
    "redundancy_status": {
        "kCassandraPrepareDone": true,
        "kZookeeperPrepareDone": true
    }
}
}
守则:

using (StreamReader reader = new StreamReader(HttpResponseStream))
                    {
                        //Response.Code = 1;
                        string body = reader.ReadToEnd();
                        consoleoutput("REST: result" + body);

                        resultdict = JsonConvert.DeserializeObject<Dictionary<string, string>>(body);



                    }
使用(StreamReader=newstreamreader(HttpResponseStream))
{
//响应代码=1;
字符串体=reader.ReadToEnd();
控制台输出(“剩余:结果”+正文);
resultDisct=JsonConvert.DeserializeObject(body);
}
我不知道如何继续。我应该逐行解析,如果值不是字符串,我应该进行另一次反序列化吗?但是如果我不知道JSON的格式(以及级别的数量),我该如何做呢

或者有没有一种更有效的方法来解析dict,而不管它有多少层

谢谢

试试:

using (StreamReader reader = new StreamReader(HttpResponseStream))
{
    //Response.Code = 1;
    string body = reader.ReadToEnd();
    consoleoutput("REST: result" + body);

    resultdict = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(body);
}
然后

using (StreamReader reader = new StreamReader(HttpResponseStream))
{
    //Response.Code = 1;
    string body = reader.ReadToEnd();
    consoleoutput("REST: result" + body);

    List<Entity> entities = JsonConvert.DeserializeObject<Entity>(body).ToList();
}
使用(StreamReader=newstreamreader(HttpResponseStream))
{
//响应代码=1;
字符串体=reader.ReadToEnd();
控制台输出(“剩余:结果”+正文);
List entities=JsonConvert.DeserializeObject(body.ToList();
}
试试:

然后

using (StreamReader reader = new StreamReader(HttpResponseStream))
{
    //Response.Code = 1;
    string body = reader.ReadToEnd();
    consoleoutput("REST: result" + body);

    List<Entity> entities = JsonConvert.DeserializeObject<Entity>(body).ToList();
}
使用(StreamReader=newstreamreader(HttpResponseStream))
{
//响应代码=1;
字符串体=reader.ReadToEnd();
控制台输出(“剩余:结果”+正文);
List entities=JsonConvert.DeserializeObject(body.ToList();
}

并非这些json属性的每个值都是字符串,因此您无法将此json反序列化到string->string字典中,请尝试使用
dictionary
。理想情况下,您应该使用所有这些属性定义一个类,但如果您必须/想要使用字典,则需要一个能够容纳所有可能性的TValue,string不会你也可以只做
jsoninvert.DeserializeObject(…
如果响应是稳定的,则需要反序列化到某些类中。并非这些json属性的每个值都是字符串,因此您无法将此json反序列化到字符串->字符串字典中,请尝试使用
字典
。理想情况下,您应该使用所有这些属性定义一个类,但如果您必须/想要使用字典,你需要一个能容纳所有可能性的TValue,string不会。你也可以只做
JsonConvert.DeserializeObject(…
),如果响应是稳定的,你需要反序列化到一些类中。谢谢!我不知道如何处理属性定义,但我会尝试了解它。同时我使用“string,dynamic”解决方案。但是,我无法访问这些嵌套对象。我应该用属性定义来解决这个问题吗?谢谢!即使IDE没有向您建议嵌套对象的名称,您也可以直接访问它们,如果我帮了您,请将答案标记为已接受!谢谢!我不知道如何使用属性定义,但我不会我想了解一下,同时我在使用“字符串,动态”解决方案。但是,我无法访问这些嵌套对象。我应该通过属性定义来克服这一问题吗?谢谢!即使IDE没有向您建议嵌套对象的名称,您也可以直接访问它们,如果我帮助您,请将答案标记为已接受!