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

基类重写ToString方法序列化子类仅返回空JSON,如何实现统一重写

问题根因

该现象是System.Text.Json的默认序列化逻辑导致的:无泛型参数的JsonSerializer.Serialize(Object)方法会使用参数的编译时类型做序列化解析。你在基类ResponseBase中调用该方法时,this的编译时类型固定为ResponseBase,因此只会序列化基类定义的属性,子类扩展的属性不会被识别。

解决方案

修改基类的ToString实现,调用JsonSerializer.Serialize的重载方法,显式传入运行时的实际类型即可:

public class ResponseBase
{
    public override string ToString()
    {
        // GetType()会返回当前实例运行时的真实类型(即子类类型)
        return JsonSerializer.Serialize(this, GetType());
    }
}

修改后再次运行测试代码,就能得到包含Name属性的正常JSON结果{"Name":"Test"}。

可选扩展

如果需要统一控制序列化行为(比如驼峰命名、忽略空值、循环引用处理等),可以自定义全局JsonSerializerOptions传入:

public class ResponseBase
{
    // 全局统一序列化配置
    private static readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions
    {
        PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
        DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
    };

    public override string ToString()
    {
        return JsonSerializer.Serialize(this, GetType(), _jsonOptions);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 18:15:03