C#C
C#3y ago
LPeter1997

❔ Avoid infinite recursion in STJ converters

There are so-so many cases where I only want to customize reading up a type in System.Text.Json, but I'd want the default behavior for writing. Currently I'm doing this to avoid SO:
    public override void Write(Utf8JsonWriter writer, TInterface value, JsonSerializerOptions options)
    {
        // TODO: Ugly hack, can we avoid recursion in a nicer way?
        // Remove this converter
        var newOptions = new JsonSerializerOptions(options);
        for (var i = options.Converters.Count - 1; i >= 0; --i)
        {
            if (options.Converters[i].GetType() == this.GetType()
             || options.Converters[i].GetType() == typeof(ModelInterfaceConverter))
            {
                newOptions.Converters.RemoveAt(i);
            }
        }

        // Default behavior
        JsonSerializer.Serialize(writer, value, newOptions);
    }

This is janky as hell IMO, is there a better/nicer way? I've found no obvious answer to it.
Was this page helpful?