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

ASP.NET Core 3.1 Web API如何正确接收Body子类参数并完成反序列化

问题根因

你的接口参数声明为基类ThirdPartyBaseToken,默认情况下JSON序列化器只会基于基类的元数据进行反序列化,子类ThirdPartyChildToken重写属性标记的JsonProperty特性不会被识别,因此openToken字段无法完成映射。

可行解决方案

方案1:使用JsonProperty多别名配置(推荐,改动最小)

如果使用Newtonsoft.Json v12及以上版本,直接给基类的AccessToken属性添加别名即可,无需定义子类:

public class ThirdPartyBaseToken
{
    [JsonProperty("accessToken", AlternativeNames = new[] {"openToken"})]
    public virtual string AccessToken { get; set; }

    [JsonProperty("brand")]
    public virtual string Brand { get; set; }
}

序列化器会自动匹配accessToken或openToken任意一个字段赋值给AccessToken属性。

方案2:双属性兼容适配(兼容性最强,无序列化器版本要求)

直接在类中定义两个属性分别绑定不同的字段,合并返回有效值,无需修改任何序列化配置:

public class ThirdPartyBaseToken
{
    [JsonProperty("accessToken")]
    public string InnerAccessToken { get; set; }
    [JsonProperty("openToken")]
    public string InnerOpenToken { get; set; }
    
    // 对外统一取有效值
    public string AccessToken => InnerAccessToken ?? InnerOpenToken;

    [JsonProperty("brand")]
    public string Brand { get; set; }
}

方案3:自定义多态反序列化(适合需要保留继承结构的场景)

如果一定要保留基类+子类的继承设计,需要自定义JSON转换器,根据请求报文字段决定反序列化的目标类型:

  1. 定义转换器:
public class ThirdPartyTokenConverter : JsonConverter<ThirdPartyBaseToken>
{
    public override ThirdPartyBaseToken ReadJson(JsonReader reader, Type objectType, ThirdPartyBaseToken existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        var jObject = JObject.Load(reader);
        // 判断存在的字段,选择反序列化类型
        var target = jObject.ContainsKey("openToken") ? new ThirdPartyChildToken() : new ThirdPartyBaseToken();
        serializer.Populate(jObject.CreateReader(), target);
        return target;
    }

    public override void WriteJson(JsonWriter writer, ThirdPartyBaseToken value, JsonSerializer serializer)
    {
        serializer.Serialize(writer, value);
    }
}
  1. 给基类标记转换器特性:
[JsonConverter(typeof(ThirdPartyTokenConverter))]
public class ThirdPartyBaseToken
{
    // 原有属性保持不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:54:05