Newtonsoft.Json.JsonConvert.DeserializeObject返回为NULL

ycggw6v2  于 2023-05-08  发布在  其他
关注(0)|答案(3)|浏览(234)

我从一个API调用中得到以下字符串:

{
  "result":
  [
    {
     "sys_id":"12d199028752a9108ae38516dabb35d3"
    }
  ]
}

我正在尝试将其反序列化到这个类中”

public class result
    {
        public string sys_id { get; set; }
    }

我使用这个调用:var x = Newtonsoft.Json.JsonConvert.DeserializeObject<result>(jsonString);
但是“x.sys_id”总是显示为NULL。我错过了什么?

2fjabf4q

2fjabf4q1#

JSON响应的结构由一个对象组成,该对象具有array类型的属性result,其中有一个对象包含string类型的单个属性sys_id
因此,您需要将响应Map到如下内容:

public class Root // change name as necessary
{
    [JsonProperty("result")]
    public ICollection<ResultItem> Result { get; set; }
}

public class ResultItem // change name as necessary
{
    [JsonProperty("sys_id")]
    public string SysId { get; set; }
}

然后,您可以将其用作:

var x = Newtonsoft.Json.JsonConvert.DeserializeObject<Root>(jsonString);
mnowg1ta

mnowg1ta2#

JSON对一个包含result属性的对象进行建模,该对象包含一个数组,该数组包含一个具有sys_id属性的对象,该对象本身是一个字符串。但是,您的result类用于最后一个对象,即具有sys_id的对象。因此,您缺少一个级别:你需要一些东西来控制这些结果。
让我们定义一个新的类:

public class Document // or whatever other name you want
{
    public List<result> result { get; set; }
}

然后你可以反序列化它:

var x = JsonConvert.DeserializeObject<Document>(jsonString);
1cosmwyk

1cosmwyk3#

sys_id是数组中对象的字符串属性,因此只能通过索引访问该对象。但是你不需要任何类来获取它,你只需要解析一个json字符串

string sys_id = (string) JObject.Parse(json)["result"][0]["sys_id"];

相关问题