在 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
下一篇:在 ASP.NET Core 中,如何手动序列化 JSON 并保持与系统一致?
评论列表

发表评论

评论内容
昵称:
关联文章

YES-CMS内容管理系统 售价

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