我把这个json字符串传递给了我的webapi
string jsonstring = "{\"datamodel\": \"[{\"K1\":\"V1\",\"K2\":\"V2\"}]\"}";
我内心可能有一对(K,V)。我如何在C#中解析它?
我以为我可以先将我的字符串转换为JObject并从中获取datamodel的密钥,然后使用JArray解析K,V。但它在这里的第一行代码上抛出一个jsonreader异常
JObject my_obj = JsonConvert.DeserializeObject<JObject>(jsonstring.ToString());
然后这样做..
JObject data = my_obj["datamodel"].Value<JObject>();
答案 0 :(得分:2)
首先,您发布的JSON字符串无效。根据您的评论,您可以使用此代码段清除方括号前后的引号:
string jsonstring = "{\"datamodel\": \"[{\"K1\":\"V1\",\"K2\":\"V2\"}]\"}";;
string jsonstringCleaned = jsonstring.Replace("\"[", "[").Replace("]\"", "]");
var my_obj = JsonConvert.DeserializeObject<JObject>(jsonstringCleaned);
答案 1 :(得分:1)
代码是正确的,但您获得的异常与JSON字符串的格式有关。如果您在此代码中放置了有效的JSON,它应该按预期工作。
答案 2 :(得分:1)
您的JSON字符串中的V1周围有“丢失”。 它应该是这样的:
string jsonstring = "{\"datamodel\": \"[{\"K1\":\"V1\",\"K2\":\"V2\"}]\"}";
答案 3 :(得分:0)
首先要确保你有一个有效的Json字符串。一个简单的方法是将其粘贴到Json to C#转换器工具中,例如:http://json2csharp.com/
如果这是一个选项,在Json字符串中使用单引号可能更简单,更易读,因为它避免了转义双引号的需要:
string jsonstring = "{'datamodel': [{'K1':'V1','K2':'V2'}]}"
现在我们反序列化对象并获取JArray。无需在JSON jsonstring字符串上调用ToString()。
var my_obj = JsonConvert.DeserializeObject<JObject>(jsonstring);
var data = (JArray)my_obj["datamodel"];
更好,更简洁的方法来实现相同的结果可能只是使用JObject.Parse。只需一行代码即可完成相同的结果。
var data = (JArray)JObject.Parse(jsonstring)["datamodel"];