如何在jQuery/JavaScript中将数组转换为对象属性并解决API反序列化报错
问题排查及修复方案
核心错误原因
- 错误将数组转换为对象:
ContactList.Contacts = Object.assign({}, users)这行代码会把users数组转换为键为数字索引的普通对象,而后端期望接收的是IEnumerable<Contact>集合类型,JSON对象无法反序列化为集合,直接触发你遇到的报错。 - 数组元素结构不匹配:你获取的
users是纯ID字符串组成的数组,但是后端要求Contacts的每个元素都是包含ID、Name属性的Contact对象,直接传字符串数组即使改回数组类型也会反序列化失败。 - 字段映射不匹配:前端定义的
AcntNumber字段在后端ContactList类中不存在,后端对应字段是Account类型的Account属性,需要调整属性赋值逻辑。 - 可选注意项:后端
Contact类的ID属性是大写ID,如果后端没有配置忽略大小写的序列化规则,前端传小写id会导致ID绑定失败。
修正后的代码
// 初始对象定义 var ContactList = { Account: {}, // 对应后端Account属性 Contacts: [] } // 数据处理逻辑 var users = $('select#users').val() || []; // id为users的select多选时val()直接返回id数组,无需遍历 // 把id字符串数组映射为符合后端要求的Contact对象数组 ContactList.Contacts = users.map(userId => { return { ID: userId, Name: "" // 如果需要传名称可以自行补充取值逻辑 } }); // 给Account属性赋值,对应Accounts类的字段 ContactList.Account = { AcntNumber: $("#accNum").val() }; // Ajax请求保持不变 $.ajax({ type: "POST", headers: { "Authorization": `Bearer ${token}` }, async: false, url: URL, data: JSON.stringify(ContactList), contentType: "application/json", dataType: "json", success: function (data) { console.log(data); } });
内容的提问来源于stack exchange,提问作者user3589388
相关产品推荐
相关产品推荐

