Ste*_*ane 2 .net-core .net-7.0
我正在编写一个 ASP.NET Core Web 应用程序。
我有许多共享相同Json 序列化选项的类。我想在一个位置考虑这些选项
我的方法是创建一个静态类,为应用程序的不同方面提供所有这些选项。
我想知道是否可以为选项创建静态成员,或者是否需要每次需要时创建一个新实例,请记住,多个并发线程将使用返回的实例。
换句话说,我可以写:
public static class JsonOptionsProviders
{
public static readonly JsonSerializerOptions ForPreferences = new() { Converters = { new DateOnlyJsonConverter(), new TimeOnlyJsonConverter() } };
}
Run Code Online (Sandbox Code Playgroud)
或者我必须写:
public static class JsonOptionsProviders
{
public static JsonSerializerOptions ForPreferences => new() { Converters = { new DateOnlyJsonConverter(), new TimeOnlyJsonConverter() } };
}
Run Code Online (Sandbox Code Playgroud)
JsonSerializerOptions不是一个简单的数据类,但它被设计为可重用。来自如何使用 System.Text.Json 实例化JsonSerializerOptions 实例的重用 JsonSerializerOptions 实例部分
如果您重复使用具有相同选项的 JsonSerializerOptions,请不要在每次使用时创建新的 JsonSerializerOptions 实例。每次调用都重复使用相同的实例。本指南适用于您为自定义转换器编写的代码以及调用 JsonSerializer.Serialize 或 JsonSerializer.Deserialize 时的代码。跨多个线程使用同一个实例是安全的。选项实例上的元数据缓存是线程安全的,并且该实例在第一次序列化或反序列化后是不可变的。
本文示例中的性能差异是,每次重用实例的性能差异为 190 毫秒,而每次新实例的性能差异为 40140 毫秒。
该类JsonSerializerOptions用于缓存序列化类型的元数据。
当新的选项实例传递给序列化器时,在对象图中每种类型的第一次序列化期间,序列化器都会经历一个预热阶段。此预热包括创建序列化所需的元数据缓存。元数据包括对属性 getter、setter、构造函数参数、指定属性等的委托。该元数据缓存存储在选项实例中。相同的预热过程和缓存适用于反序列化。
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |