解析Json数据字符串并检索特定元素

时间:2019-10-23 07:47:34

标签: c# json

我的JSON字符串是:

string b = "\"{\"Response\":[{\"ResponseCode\":\"0\",\"ResponseMessage\":\"71a88836-57f0-4b0e-a59c-071ea6d6f1de\"}]}\"";

我想检索ResponseCodeResponseMessage的值。

当我尝试这样的方式来解析我的JSON字符串时

var userObj = JObject.Parse(b);

我遇到错误,例如:

  

Newtonsoft.Json.JsonReaderException:“从JObject读取JsonReader时出错。当前JsonReader项不是对象:String。路径”,第1行,位置3。'

请帮助我从给定的字符串中检索ResponseCodeResponseMessage

2 个答案:

答案 0 :(得分:4)

您需要修剪外部双引号,否则它不是有效的json格式

var userObj = JObject.Parse(b.Trim('"'));

然后,您可以通过声明与json格式匹配的类并反序列化来检索数据,也可以只动态访问属性

var response = (JArray)userObj["Response"];
string responseCode = response[0]["ResponseCode"].Value<string>();
string responseMessage = response[0]["ResponseMessage"].Value<string>();

答案 1 :(得分:0)

您应该使用create匹配所需属性的类。我认为您想要一个具有ResponseCode和ResponseMessage属性的Response-class。

在这种情况下,您应该删除外部的“ Response”标签。另外,应删除反斜杠,并将双引号替换为单引号。

尝试一下:

class Response
{
    public string ResponseCode { get; set; }
    public string ResponseMessage { get; set; }
}
static void Main(string[] args)
{
    string body = @"{'ResponseCode':0,'ResponseMessage':'71a88836-57f0-4b0e-a59c-071ea6d6f1de'}";
    var response = JsonConvert.DeserializeObject<Response>(body );
}