ASP.NET Core中是否存在支持任意类序列化的反序列化工具?
问题背景
在ASP.NET Core框架中,可通过配置控制器服务的JSON选项,实现枚举类型与字符串格式的自动反序列化,对应配置代码如下:
builder.Services.AddControllers().AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); }
对应疑问:框架是否同时提供可支持任意类序列化操作的序列化/反序列化工具?
解答
是的,框架原生自带这套能力,无需额外引入第三方依赖。
ASP.NET Core 3.0及以上版本默认采用System.Text.Json作为内置JSON序列化组件,这套组件除了自动处理控制器接口的请求入参反序列化、响应出参序列化之外,完全可以直接在业务代码中手动调用,支持任意可序列化普通类(POCO)的JSON序列化、反序列化操作。
- 基础手动调用代码示例:
// 自定义业务类示例 public class Product { public string ProductName { get; set; } public decimal Price { get; set; } public ProductStatus Status { get; set; } } public enum ProductStatus { OnSale, OffShelf } // 序列化:将类实例转为JSON字符串 var product = new Product { ProductName = "机械键盘", Price = 299.9m, Status = ProductStatus.OnSale }; // 可按需配置序列化规则,比如和全局配置对齐,添加枚举转字符串的转换器 var serializerOptions = new JsonSerializerOptions { Converters = { new JsonStringEnumConverter() }, WriteIndented = true }; string jsonOutput = JsonSerializer.Serialize(product, serializerOptions); // 反序列化:将JSON字符串转为对应类实例 Product? parsedProduct = JsonSerializer.Deserialize<Product>(jsonOutput, serializerOptions);
- 开发提示:如果你已经在
AddJsonOptions中统一配置了全局序列化规则(比如枚举转换、日期格式、属性命名策略、空值处理规则等),手动调用序列化时不需要重复编写配置,直接通过依赖注入获取IOptions<JsonOptions>实例,使用其中预配置好的SerializerOptions属性即可,能保证全局序列化行为完全一致,避免出现接口返回和手动序列化结果格式不统一的问题。
如果你使用的是ASP.NET Core 3.0以下的版本,框架默认内置的JSON序列化组件为Newtonsoft.Json,同样支持手动调用完成任意类的序列化、反序列化操作,使用逻辑和上述示例基本一致。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

