项目

JSON序列化

ABP框架提供了处理JSON的抽象层。采用这种抽象设计具有以下优势:

  • 您可以编写与具体库无关的代码,从而以最小的工作量和代码变更即可切换底层实现库
  • 您可以直接使用ABP中预定义的转换器,无需关注底层库的实现细节

JSON序列化系统通过Volo.Abp.Json NuGet包实现(默认实现为Volo.Abp.Json.SystemTextJson)。在大多数情况下,您不需要手动安装该包,因为它已预装在应用启动模板中。

IJsonSerializer接口

您可以注入IJsonSerializer服务进行JSON操作。该接口提供以下方法:

public interface IJsonSerializer
{
    string Serialize(object obj, bool camelCase = true, bool indented = false);
    T Deserialize<T>(string jsonString, bool camelCase = true);
    object Deserialize(Type type, string jsonString, bool camelCase = true);
}

使用示例:

public class ProductManager
{
    public IJsonSerializer JsonSerializer { get; }

    public ProductManager(IJsonSerializer jsonSerializer)
    {
        JsonSerializer = jsonSerializer;
    }

    public void SendRequest(Product product)
    {
        var json = JsonSerializer.Serialize(product);
        // 此处为演示目的留空...
    }
}

配置选项

AbpJsonOptions

AbpJsonOptions类型为ABP中的JSON操作提供配置选项:

属性说明:

  • InputDateTimeFormats(List<string>): 输入JSON日期的格式,空字符串表示使用默认格式。可提供多种格式来解析日期
  • OutputDateTimeFormat(string): 输出JSON日期的格式,null或空字符串表示使用默认格式

System Text Json配置

AbpSystemTextJsonSerializerOptions

  • JsonSerializerOptions(System.Text.Json.JsonSerializerOptions): System.Text.Json库的全局配置选项。具体参考官方文档

AbpSystemTextJsonSerializerModifiersOptions

  • Modifiers(List<Action<JsonTypeInfo>>): 配置DefaultJsonTypeInfoResolver的修饰器。具体参考.NET 7新特性文档

Newtonsoft配置

添加Volo.Abp.Json.Newtonsoft包并依赖AbpJsonNewtonsoftModule来替换默认的System Text Json实现

AbpNewtonsoftJsonSerializerOptions

  • JsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings): Newtonsoft库的全局配置选项。具体参考官方文档

在ASP.NET Core中配置JSON选项

在ABP中配置JSON选项不会影响ASP.NET Core的JSON设置。如需修改ASP.NET Core的JSON行为,需要单独配置JsonOptionsMvcNewtonsoftJsonOptions(如果使用Newtonsoft.Json

配置示例:

Configure<JsonOptions>(options =>
{
    // 配置序列化选项
});

// 如果使用Newtonsoft.Json
Configure<MvcNewtonsoftJsonOptions>(options =>
{
    // 配置序列化设置
});
在本文档中