在 ASP.NET Core 中,如何手动序列化 JSON 并保持与系统一致?
1. 问题分析
假设我们在 Program.cs 或 Startup.cs 中这样配置 MVC:
C# 全选
builder.Services.AddControllers()
.AddNewtonsoftJson(options =>
{
options.UseCamelCasing(true); // 属性名使用驼峰命名
options.SerializerSettings.Converters.Add(new GZDateTimeConvertor());
options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});然后你在某个服务中直接写:
C# 全选
string json = JsonConvert.SerializeObject(result);你会发现生成的 JSON:
属性可能不是驼峰命名
自定义日期转换器
GZDateTimeConvertor没生效循环引用可能报错
原因:AddNewtonsoftJson 的配置 只作用于 MVC 自动序列化(比如返回 JsonResult 或 Ok(obj)),而 JsonConvert.SerializeObject 调用的是全局默认设置,不会读取 MVC 配置。
2. 正确的解决方法
使用系统默认的System.Text.Json
C# 全选
using System.Text.Json;
using Microsoft.Extensions.Options;
public class MyService
{
private readonly JsonSerializerOptions _jsonOptions;
public MyService(IOptions<JsonOptions> options)
{
_jsonOptions = options.Value.JsonSerializerOptions;
}
public string Serialize(object obj)
{
return System.Text.Json.JsonSerializer.Serialize(result, _jsonOptions);
}
}
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
post 张国生


