How to globally set default options for System.Text.Json.JsonSerializer?

You can create an extension method. Here's an example

I use separate methods vs having to build special settings, so that all the settings will be in a single spot and easily reusable.

public static class DeserializeExtensions
    private static JsonSerializerOptions defaultSerializerSettings = new JsonSerializerOptions();

    // set this up how you need to!
    private static JsonSerializerOptions featureXSerializerSettings = new JsonSerializerOptions();

    public static T Deserialize<T>(this string json)
        return JsonSerializer.Deserialize<T>(json, defaultSerializerSettings);

    public static T DeserializeCustom<T>(this string json, JsonSerializerOptions settings)
        return JsonSerializer.Deserialize<T>(json, settings);

    public static T DeserializeFeatureX<T>(this string json)
        return JsonSerializer.Deserialize<T>(json, featureXSerializerSettings);

Then you call it as a method on a string, whether literal or a variable.

    Car result = @"{""Wheels"": 4, ""Doors"": 2}".DeserializeFeatureX<Car>();

No, JsonSerializerOptions does not expose the default options. If you are using a particular web framework there may be a way to specify (de-)serialization settings through that. Otherwise, I suggest creating your own convenience methods.

See also this open issue.

This seemed to work for me, in StartUp.ConfigureServices:

services.AddControllers().AddJsonOptions(options =>
        options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());