Json从JSON Object C#获取数组对象

时间:2017-02-03 14:37:55

标签: c# json asp.net-web-api

我把这个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>();

4 个答案:

答案 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"];