设置 JsonSerializerContext 时引用处理程序的默认序列化选项

问题描述 投票:0回答:1

我想设置引用处理程序的默认序列化选项以忽略循环。我注意到

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,
};
c# .net serialization system.text.json sourcegenerators
1个回答
0
投票

你说得对,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。

© www.soinside.com 2019 - 2024. All rights reserved.