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

ASP.NET Core中JsonConverter<T>.Write方法未触发问题求助

问题原因及解决方法

核心问题:转换器方法签名错误

你的MyEnumConverter继承了JsonConverter<MyEnum>,但Read和Write方法错误地使用了泛型参数T,而非具体的MyEnum类型。System.Text.Json无法识别这个不符合约定的方法签名,因此序列化(写入数据)时会忽略自定义转换器,转而使用默认的对象序列化逻辑,导致输出{ "code": 1, "description": "First" }这类完整类结构;而反序列化(读取数据)时,因为Read方法的参数和返回值类型刚好能匹配(reader.GetString()对应字符串输入,返回值能隐式转为MyEnum),所以侥幸生效了。

修正后的转换器代码

public class MyEnumConverter : JsonConverter<MyEnum>
{
    public override MyEnum? Read(ref Utf8JsonReader reader, Type _, JsonSerializerOptions _) 
        => MyEnum.Parse(reader.GetString());

    public override void Write(Utf8JsonWriter writer, MyEnum value, JsonSerializerOptions _)
        => writer.WriteStringValue(value.ToString());
}

额外排查点

  • 确认控制器返回的Dto对象中,Foo属性确实是MyEnum的有效实例,没有被意外替换为其他类型。
  • 如果项目中使用了Newtonsoft.Json(通过AddNewtonsoftJson配置),那么原AddJsonOptions的配置不会生效,需要改用Newtonsoft的配置方式添加转换器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:52:28