JSON.NET"对象引用未设置为对象的实例"



我正在尝试反序列化JSON http响应,但一直收到错误"对象引用未设置为对象实例"。

我知道这是一个常见的问题,但我对这个错误没有任何帮助。我想我错过了一些非常基本的东西。

我得到的JSON响应如下:

{
"value": [
{
"createdDateTime": "2020-03-14T12:25:54Z",
"id": "W2RQ6DOBCJUXWGR35DLKP7UI6IN",
"name": "somename",
"size": 200230,
},
{
"createdDateTime": "2020-03-24T08:25:03Z",
"id": "Q6DOBCJUXWFIGR35DLWERKP7UI6IN",
"name": "somename",
"size": 200230,
},
...
]
}

我已经设法反序列化了只在响应中出现一次的属性。但是,这一次我需要返回属性"id"one_answers"name"。以下是我尝试的方法:

public class Value
{
public string Name { get; set; }
public string Id { get; set; }
public Value[] Children { get; set; }
}
public class RootObject
{
public Value[] RespValues { get; set; }
}
var objJSON = JObject.Parse(jsonresponse);
var objResponse = objJSON["Response"].ToString();
RootObject categoryTree = JsonConvert.DeserializeObject<RootObject>(objResponse);

到目前为止,我尝试了几种不同的方法,但每一种都会导致错误。我真的不确定我做错了什么。

在这一行var objResponse = objJSON["Response"].ToString();中,您试图从json中获取"Response"值,但没有任何名为"Response"的字段

同样在RootObject类中,您有RespValue属性,但您的json是"value",您应该使这2个字段具有相同的名称。要么将类的属性更改为@value,要么将json更改为"respValue"

然后,如果你想解析json,你可以使用这个

var objJSON = JsonConvert.DeserializeObject<RootObject>(json);

要访问其值,可以使用数组索引或来自youtobjJSON变量的foreach循环

这是我基于你的问题的完整代码

public class Value
{
public string Name { get; set; }
public string Id { get; set; }
public Value[] Children { get; set; } // will always null
}
public class RootObject
{
public Value[] @value { get; set; } // Your json's field named value
}
public static void Main()
{
string jsonexample = @"{""value"": [
{
""createdDateTime"": ""2020-03-14T12:25:54Z"",
""id"": ""W2RQ6DOBCJUXWGR35DLKP7UI6IN"",
""name"": ""somename"",
""size"": 200230,
},
{
""createdDateTime"": ""2020-03-24T08:25:03Z"",
""id"": ""Q6DOBCJUXWFIGR35DLWERKP7UI6IN"",
""name"": ""somename"",
""size"": 200230,
}
]
}";
var objJSON = JsonConvert.DeserializeObject<RootObject>(jsonexample);
Console.WriteLine(objJSON.value[0].Name);
foreach(var item in objJSON.value)
{
Console.WriteLine(item.Id);
}
}

最新更新