在 ASP.NET Core 中,如何手动序列化 JSON 并保持与系统一致?


1. 问题分析

 

假设我们在 Program.csStartup.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 自动序列化(比如返回 JsonResultOk(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开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:RabbitMQ延时插件rabbitmq_delayed_message_exchange
下一篇:MSSQL数据库备份+日志搜索
评论列表

发表评论

评论内容
昵称:
关联文章

ASP.NET Core 如何手动序列 JSON 保持系统一致
如何 .NET Core ASP.NET指定端口号启动:最佳实践动态配置
C# XML 序列序列详解及实战示例
.net core mvc项目JSON统一处理
asp.net - ASP.NET Core MVC 嵌套 TagHelper
ASP.NET Core web API使用Swagger/OpenAPI(Swashbuckle)
C# ASP.NET Core开发学生信息管理系统(一)
C# ASP.NET Core开发学生信息管理系统(三)
C# ASP.NET Core开发学生信息管理系统(二)
ASP.NET Core MVC 过滤器ActionFilter保存页面的生成的html静态页面文件
如何 Entity Framework 自动截断超长字符串避免异常
ASP.NET Core MVC的路由约束
进销存系统如何基于账期管理进行精准库存计算
ASP.NET MVC和ASP.NET Core MVC获取当前URL/Controller/Action
如何进销存系统进行账期管理和封账操作
ASP.NET Core 服务注入对比:IServiceProvider.GetService vs Lazy<T> 注入性能分析
ASP.NET Core官网教程,资料查找
网站迁移纪实:从Web Form 到 Asp.Net Core (Abp vNext 自定义开发)
使用.NET 6开发TodoList应用(27)——实现API的Swagger文档
ASP.NET Core 读取Post Request.Body 的正确姿势

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码