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
相关产品推荐
相关产品推荐

