我正在点击一个返回类似JSON的响应的Web服务,我正在尝试反序列化对C#对象的响应 . 我使用Visual Studio编辑>选择性粘贴>粘贴JSON作为类方法来创建类的基本版本 . 当我尝试使用下面的方法反序列化对这些类的Web服务响应时(其中rawResp是来自Web服务的响应作为文本)
var results = JsonConvert.DeserializeObject<List<ApplyEditsResult>>(rawResp);
我收到以下错误消息:
无法将当前JSON对象(例如{“name”:“value”})反序列化为类型“Rid20Api.Models.ApplyEditsResult Result”,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化 . 要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是类似的集合类型可以从JSON对象反序列化的数组或List . JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化 . 路径'[0] .addResults [0] .objectId',第1行,第35位 .
我尝试将“JsonObject”属性添加到适当的类中;还添加了JsonArray属性 . 我错过了正确反序列化响应的内容?
来自Web服务的响应:
[
{
"id": 0,
"addResults": [
{
"objectId": 1215,
"globalId": "{5a3d5c49-856c-4de4-9d20-c7abf0e070c8}",
"success": true
}
],
"attachments": {
"addResults": [],
"deleteResults": [],
"updateResults": []
}
},
{
"id": 2,
"addResults": [
{
"objectId": 819,
"globalId": "{459f456a-c115-4f9c-b1f9-d754d55980dd}",
"success": true
},
{
"objectId": 820,
"globalId": "{f690cded-2ffb-4301-ab6e-58ae9733eeba}",
"success": true
}
]
}
]
和类(类是嵌套还是'独立'没有任何区别):
public class ApplyEditsResult
{
public int id { get; set; }
public Result[] addResults { get; set; }
public Result[] updateResults { get; set; }
public Result[] attachments { get; set; }
[JsonObject]
public class Attachments
{
[JsonProperty("addResults")]
public object[] addResults { get; set; }
[JsonProperty("deleteResults")]
public object[] deleteResults { get; set; }
[JsonProperty("updateResults")]
public object[] updateResults { get; set; }
}
[JsonArray(AllowNullItems = true)]
[JsonObject]
public class Result
{
public bool success { get; set; }
public Error error { get; set; }
public int objectId { get; set; }
public string globalId { get; set; }
}
[JsonObject]
public class Error
{
public int code { get; set; }
public string description { get; set; }
}
}
EDIT .........这是VS工具创建的未编辑的类集合 . 如上所述,在下面的评论中,我更改了其中一些类1)以更好地适应我的代码(包括来自服务的错误响应)和2)在(失败)尝试自己纠正错误 .
public class Rootobject
{
public Class1[] Property1 { get; set; }
}
public class Class1
{
public int id { get; set; }
public Addresult[] addResults { get; set; }
public Attachments attachments { get; set; }
}
public class Attachments
{
public object[] addResults { get; set; }
public object[] deleteResults { get; set; }
public object[] updateResults { get; set; }
}
public class Addresult
{
public int objectId { get; set; }
public string globalId { get; set; }
public bool success { get; set; }
}
1 回答
你的课应该是这样的
然后