Asp.Net Web API返回AddressModel时address列表格式异常如何修复
问题产生原因
- 你调用的第三方API本身返回的
address字段就是3个仅携带单个有效属性的拆分对象结构,当前代码直接将反序列化得到的AddressModel原封不动返回给前端,未做数据整合处理,因此返回结构和第三方接口保持一致,不符合你的预期。 - 你粘贴的第三方返回JSON示例中
address1的键名漏写了闭合引号属于笔误,若实际接口返回真的存在JSON格式错误,需要先做格式兼容处理后再反序列化。
解决方案
在获取第三方接口的返回结果后,新增地址属性合并逻辑,将多个拆分的Address对象的非空属性整合到同一个对象中即可,调整后的GetAddressById代码示例如下:
public AddressModel GetAddressById(string id) { // ** 原有业务代码 ** HttpResponseMessage response = client.GetAsync(uri).Result; var originalResult = response.Content.ReadAsAsync<AddressModel>().Result; // 新增地址合并逻辑 if (originalResult.address != null && originalResult.address.Count > 1) { var mergedAddress = new Address(); foreach (var addrItem in originalResult.address) { // C# 8.0及以上版本用空合并赋值运算符 mergedAddress.address1 ??= addrItem.address1; mergedAddress.address2 ??= addrItem.address2; mergedAddress.postalCode ??= addrItem.postalCode; // 低版本C#替换为下方写法 // if (mergedAddress.address1 == null) mergedAddress.address1 = addrItem.address1; // if (mergedAddress.address2 == null) mergedAddress.address2 = addrItem.address2; // if (mergedAddress.postalCode == null) mergedAddress.postalCode = addrItem.postalCode; } // 替换为仅包含合并后对象的列表 originalResult.address = new List<Address> { mergedAddress }; } return originalResult; }
- 上述逻辑默认取第一个出现的非空属性值,若业务需要取最后一个非空值,直接去掉空判断、遍历赋值即可覆盖之前的值。
- 如果后续Address类新增了其他属性,同步在合并逻辑里补充对应字段的赋值即可。
内容的提问来源于stack exchange,提问作者DevP
相关产品推荐
相关产品推荐

