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

调用Ziptastic API时JSON反序列化DefaultState与DefaultCity为空问题求解

问题原因分析
  • 序列化特性与反序列化库不匹配:你定义实体类时使用的[JsonPropertyName]是System.Text.Json命名空间下的专属特性,仅对.NET自带的System.Text.Json序列化库生效,但你实际反序列化调用的是Newtonsoft.Json(Json.NET)的JsonConvert.DeserializeObject方法,Newtonsoft.Json可识别的映射特性为[JsonProperty]。因为country字段的类属性名和接口返回的JSON键名完全一致,无需特性也能正常映射,而state、city对应的类属性名为DefaultState、DefaultCity,和JSON键名不匹配,也没有被当前反序列化库识别的映射特性,所以反序列化后取值为null。
  • 赋值逻辑存在笔误:你当前写的State=ziptasticResponse.DefaultCity属于属性赋值错误,应该取DefaultState的值赋值给State字段。
解决方案

方案1:统一使用Newtonsoft.Json的映射特性

将实体类的特性替换为Newtonsoft.Json可识别的[JsonProperty]即可:

using Newtonsoft.Json;

public class ZiptasticAPIResponse
{
    [JsonProperty("country")]
    public string country { get; set; }
    [JsonProperty("state")]
    public string DefaultState { get; set; }
    [JsonProperty("city")]
    public string DefaultCity { get; set; }
    [JsonProperty("citiesList")]
    public List<CitiesList> CitiesList { get; set; }
}

方案2:统一使用System.Text.Json做反序列化

将反序列化调用替换为.NET自带的System.Text.Json类库方法:

// 引入命名空间 using System.Text.Json;
var ziptasticResponse = JsonSerializer.Deserialize<ZiptasticAPIResponse>(content);
额外优化建议
  • 增加非空判断逻辑,避免反序列化失败后触发空引用异常:
if(ziptasticResponse != null 
    && !string.IsNullOrEmpty(ziptasticResponse.DefaultState) 
    && !string.IsNullOrEmpty(ziptasticResponse.DefaultCity))
{
    ziptasticResponse.CitiesList = new List<CitiesList>()
    {
        new CitiesList()
        {
            State = ziptasticResponse.DefaultState,
            City = ziptasticResponse.DefaultCity
        }
    };
}
  • 反序列化前先判断请求响应状态码为成功状态,再读取返回内容做解析,避免无效内容触发报错。

内容的提问来源于stack exchange,提问作者GettingStarted

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:24:01