© 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
C#C
C#•3y ago•
27 replies
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);
    }
    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.
C# banner
C#Join
We are a programming server aimed at coders discussing everything related to C# (CSharp) and .NET.
61,871Members
Resources

Similar Threads

Was this page helpful?
Recent Announcements

Similar Threads

✅ How to avoid stackoverflow exception in multiple recursion
C#CC# / help
3y ago
recursion
C#CC# / help
16mo ago
recursion
C#CC# / help
4y ago
STJ Polymorphic Serialization in Source Gen mode
C#CC# / help
10mo ago