无法反序列化当前 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 数组

这里有两个问题:

  1. 您的 JSON 表示对象列表,但您正在尝试反序列化为不是列表的类。 这就是为什么你得到一个例外。 要解决此问题,您需要更改代码:

    var list = JsonConvert.DeserializeObject<List<memberInfo>>(content);
    currentMember = list[0];
    

    请注意,上面的代码假定列表始终至少包含一个元素。 如果列表可能为空或为空,则必须调整代码来处理它。

  2. 在您的 JSON 中,membershipType 属性的值为 null ,但在您的类中,它被声明为 int 。 反序列化时,这将导致错误,因为无法将null分配给int. 若要解决此问题,需要改为将 membershipType 属性更改为 int?

    public int? membershipType { get; set; }
    

解决这两个问题后,反序列化应该可以正常工作。