我想设置引用处理程序的默认序列化选项以忽略循环。我注意到
JsonSourceGenerationOptions
没有与 JsonSerializerOptions
不同的引用处理程序属性。在创建上下文时如何使用 JsonSourceGenerationOptions
来做到这一点?
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(WeatherForecast))]
internal partial class SourceGenerationContext : JsonSerializerContext
{
}
或者,是否有另一种方法可以覆盖默认选项?我尝试覆盖
GeneratedSerializerOptions
但收到 CS0102: The type already contains a definition for 'GeneratedSerializerOptions'
错误。
protected override JsonSerializerOptions GeneratedSerializerOptions => new JsonSerializerOptions
{
ReferenceHandler = ReferenceHandler.IgnoreCycles,
};
你说得对,JsonSourceGenerationOptions 不直接支持设置 ReferenceHandler。但是,您可以通过在上下文中自定义 JsonSerializerOptions 来实现此目的。这是一种不会遇到 CS0102 错误的方法:
在您的分部类中创建自定义 JsonSerializerOptions 属性。 序列化或反序列化时使用此属性。
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(WeatherForecast))]
internal partial class SourceGenerationContext : JsonSerializerContext
{
private static readonly JsonSerializerOptions _customOptions = new JsonSerializerOptions
{
ReferenceHandler = ReferenceHandler.IgnoreCycles,
WriteIndented = true
};
public static JsonSerializerOptions CustomOptions => _customOptions;
}
然后,当您需要序列化或反序列化时,请使用 CustomOptions。