You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:57:03