无法反序列化当前 JSON 数组
本文关键字:JSON 数组 反序列化 | 更新日期: 2023-09-27 18:32:26
我正在编写一个使用 Newtonsoft.Json 的 Xamarin 应用程序,但遇到以下错误消息的问题:
"无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型 "learningAndroidICS.memberInfo",因为该类型需要 JSON 对象以正确反序列化。要修复此错误,请将 JSON 转换为 JSON 对象或将反序列化类型更改为数组或 实现集合互通的类型,如 List 可以是 从 JSON 数组序列化。
考虑到我的代码看起来像这样:
currentMember = JsonConvert.DeserializeObject<memberInfo> (content);
其中 currentMember 是 memberInfo 类的一个实例,如下所示:
using System;
namespace learningAndroidICS
{
public class memberInfo
{
public string id { get; set; }
public string lastName { get; set; }
public string firstName1 { get; set; }
public string firstName2 { get; set; }
public string address1 { get; set; }
public string address2 { get; set; }
public string childName1 { get; set; }
public string childName2 { get; set; }
public string childName3 { get; set; }
public string childName4 { get; set; }
public string childName5 { get; set; }
public string childName6 { get; set; }
public string childName7 { get; set; }
public string childName8 { get; set; }
public string childName9 { get; set; }
public string childName10 { get; set; }
public string childDOB1 { get; set; }
public string childDOB2 { get; set; }
public string childDOB3 { get; set; }
public string childDOB4 { get; set; }
public string childDOB5 { get; set; }
public string childDOB6 { get; set; }
public string childDOB7 { get; set; }
public string childDOB8 { get; set; }
public object childDOB9 { get; set; }
public string childDOB10 { get; set; }
public string dateActivated { get; set; }
public string dateDeactivated { get; set; }
public string isActive { get; set; }
public int membershipType { get; set; }
public string city { get; set; }
public string state { get; set; }
public string zip { get; set; }
public string email { get; set; }
public memberInfo ()
{
}
}
}
JSON 字符串(来自 Web 服务)如下所示:
[
{
"id": "8",
"lastName": "Smith",
"firstName1": "John",
"firstName2": "Jane",
"address1": "123 Fake Ave",
"address2": "",
"childName1": "Bill",
"childName2": "John",
"childName3": "Jim",
"childName4": "",
"childName5": "",
"childName6": "",
"childName7": null,
"childName8": null,
"childName9": null,
"childName10": null,
"childDOB1": "11/02/1991",
"childDOB2": "22/10/1992",
"childDOB3": "11/08/1998",
"childDOB4": "",
"childDOB5": "",
"childDOB6": "",
"childDOB7": null,
"childDOB8": null,
"childDOB9": null,
"childDOB10": null,
"dateActivated": "26/11/2014",
"dateDeactivated": "",
"isActive": "1",
"membershipType": null,
"city": "Fake",
"state": "MI",
"zip": "12345",
"email": "fake@gmail.com"
}
]
这里有两个问题:
-
您的 JSON 表示对象列表,但您正在尝试反序列化为不是列表的类。 这就是为什么你得到一个例外。 要解决此问题,您需要更改代码:
var list = JsonConvert.DeserializeObject<List<memberInfo>>(content); currentMember = list[0];
请注意,上面的代码假定列表始终至少包含一个元素。 如果列表可能为空或为空,则必须调整代码来处理它。
-
在您的 JSON 中,
membershipType
属性的值为null
,但在您的类中,它被声明为int
。 反序列化时,这将导致错误,因为无法将null
分配给int.
若要解决此问题,需要改为将membershipType
属性更改为int?
。public int? membershipType { get; set; }
解决这两个问题后,反序列化应该可以正常工作。