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

.NET 6.0中单个字段的Custom JsonConverter特性失效问题

解决.NET 6中Newtonsoft Json特性转换器不生效的问题

问题根源

迁移到.NET 6后[JsonConverter]特性失效,大概率是混淆了Newtonsoft.Json与System.Text.Json的命名空间,或是全局配置中的冗余设置导致特性被忽略。

具体解决方案

1. 确保特性引用正确的命名空间

因为你已配置使用Newtonsoft.Json作为序列化工具,必须保证实体类中的[JsonConverter]特性来自Newtonsoft.Json命名空间,而非默认的System.Text.Json.Serialization:

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

public class CustomDateConverter : IsoDateTimeConverter
{
    public CustomDateConverter()
    {
        DateTimeFormat = "dd.MM.yyyy";
    }
}

public class Test
{
    // 必须是Newtonsoft.Json下的JsonConverter特性
    [JsonConverter(typeof(CustomDateConverter))]
    public DateTime? CustomFormattedDate { get; set; }
}

2. 简化全局配置,消除潜在冲突

你的配置中显式设置了DefaultContractResolver,但Newtonsoft.Json默认就使用该解析器,冗余设置可能引发冲突。尝试注释掉这一行:

builder.Services.AddControllersWithViews()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
        // 注释此行,避免不必要的配置冲突
        // options.SerializerSettings.ContractResolver = new DefaultContractResolver();
    });

3. 检查手动序列化场景

如果控制器Action中手动使用System.Text.Json.JsonSerializer序列化对象,会绕过Newtonsoft的配置,此时需改用Newtonsoft的序列化方法:

// 错误写法(使用System.Text.Json)
var json = JsonSerializer.Serialize(testObj);

// 正确写法(使用Newtonsoft.Json)
var json = JsonConvert.SerializeObject(testObj);

验证步骤

启动项目后,访问返回Test对象的接口,查看CustomFormattedDate字段是否按dd.MM.yyyy格式输出。若仍不生效,可尝试删除项目的bin/obj目录清理缓存后重新构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:52:45