繁体   English   中英

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

[英]Json get array object from JSON Object C#

我有这个json字符串传递给我的webapi

 string jsonstring = "{\"datamodel\": \"[{\"K1\":\"V1\",\"K2\":\"V2\"}]\"}";

我的(K,V)对中可能有更多。 我如何在C#中解析呢?

我以为我可以先将字符串转换为JObject并从中获取数据模型的密钥,然后使用JArray解析K,V。 但它在这里的第一行代码中引发jsonreader异常

JObject my_obj = JsonConvert.DeserializeObject<JObject>(jsonstring.ToString());

然后这样做

 JObject data = my_obj["datamodel"].Value<JObject>();

首先,您要发布的JSON字符串无效。 根据您的评论,您可以使用以下代码段清除方括号前后的引号:

string jsonstring = "{\"datamodel\": \"[{\"K1\":\"V1\",\"K2\":\"V2\"}]\"}";;
string jsonstringCleaned = jsonstring.Replace("\"[", "[").Replace("]\"", "]");
var my_obj = JsonConvert.DeserializeObject<JObject>(jsonstringCleaned);

该代码是正确的,但是您得到的异常与JSON字符串的格式有关。 如果在此代码中放入有效的JSON,则它应能按预期工作。

JSON字符串中的V1左右缺少\\“。看起来应该像这样:

string jsonstring = "{\"datamodel\": \"[{\"K1\":\"V1\",\"K2\":\"V2\"}]\"}";

首先,始终确保您具有有效的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"];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM