c# - JsonSerializationException:无法创建和填充列表类型
问题描述
我正在处理错误:
Newtonsoft.Json.JsonSerializationException:无法创建和填充列表类型 UpdatePurchaseOrders.SalesOrderSummaryCollection。路径'',第 1 行,位置 1。
JSON:
[
{
"OrderNumber": "017323906",
"PONumber": "PON023329",
"DocType": "ZOR",
"Status": "On Hold",
"Total": 83899.1600,
"DateEntered": "3/2/2021 11:05 AM",
"LastChanged": "3/4/2021 7:19 AM"
}
]
我有两个正在测试的课程。第一个是具有与 JSON 匹配的属性的对象。
[JsonArray]
public class SalesOrderSummary
{
public string OrderNumber { get; set; }
public string PONumber { get; set; }
public string DocType { get; set; }
public string Status { get; set; }
public float Total { get; set; }
public string DateEntered { get; set; }
public string LastChanged { get; set; }
}
第二个我调用一个只有第一个对象数组的集合对象。
[JsonArray]
public class SalesOrderSummaryCollection
{
public SalesOrderSummary[] result { get; set; }
}
去年我在另一个项目中使用了这个确切的概念,它工作得非常好——没有使用任何 JSON 属性。
在这个当前的项目中,我可以尝试反序列化到任一类,但我得到了同样的错误。如果我使用SalesOrderSummaryCollection
并删除该[JsonArray]
属性,则会收到以以下结尾的错误:
[...] 因为该类型需要 JSON 对象
我犹豫地说我理解,但在我提到的去年项目中我没有收到这个错误。
所以我不知道为什么两个项目之间的相同概念表现不同或如何解决这个问题。
解决方案
您的 JSON 包含一个对象数组,因此可以使用以下命令对其进行解析:
var parsedArray = JArray.Parse(json);
您正在尝试反序列化为 type 的对象SalesOrderSummaryCollection
,该对象定义对象数组SalesOrderSummary
。
JSON 不包含任何根对象,因此例外。要反序列化为该对象类型,您的 JSON 应以:
{ "result": [ { // Object 1 }, { // Object N } ] }
它不能用 装饰[JsonArray]
,因为它不是一个数组。
直接的解决方案是反序列化为SalesOrderSummary
对象集合,List<SalesOrderSummary>
或者SalesOrderSummary[]
:
var salesOrder = JsonConvert.DeserializeObject<SalesOrderSummary[]>(json);
// or
var salesOrder = JsonConvert.DeserializeObject<List<SalesOrderSummary>>(json);
推荐阅读
- azure-active-directory - 我正在尝试使用 web api 在 azure b2c 中读/写用户,但我获得的权限不足
- android - Android Webview:无需重新加载网页即可导航
- java - (Java) 使用 for 循环创建数组列表的排列
- android - 在回收器适配器中设置 clicklistener 以从 firebase 下载视频
- python - 使用 pythonSDK 停止 OpenStack 服务器实例
- javascript - 在返回函数上使用 mixin 函数,而不是函数的值
- sql-server - 如何在 Python 中使用 varbinary 解析原生格式的 BCP 输出文件
- .net-core - '忽略'串行连接上的 DTR
- python - 我的列表框不显示 Treeview 小部件
- c# - 如何从普通数组创建可观察对象?