Home > OS >  .NET 6 - AddJsonOptions with CamelCase not working
.NET 6 - AddJsonOptions with CamelCase not working

Time:04-29

I have tried use camelCase insentive on .NET 6 for deseralize content from API

I configured like this in Startup.cs, but it is not working

            .AddControllers()
            .AddJsonOptions(options =>
            {
                options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
                options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
                options.JsonSerializerOptions.IgnoreNullValues = true;
            });

I get to solve with this resolution: https://github.com/andre-ss6 https://github.com/dotnet/runtime/issues/31094#issuecomment-543342051

He recommended using the following code:

            ((JsonSerializerOptions)typeof(JsonSerializerOptions)
    .GetField("s_defaultOptions",
        System.Reflection.BindingFlags.Static |
        System.Reflection.BindingFlags.NonPublic).GetValue(null))
    .PropertyNameCaseInsensitive = true;

I tried and worked, but I thought is complex, because it is used reflection, I don't know what to thought, Someone have other solution or a explanation?

I deserialize it like this:

        var content = await response.Content.ReadAsStringAsync(cancellationToken);

        var result = JsonSerializer.Deserialize<InvestimentFundsResponseData>(content);

My class is, how can you saw, I don't use the attribute [JsonPropertyName]

    public class InvestimentFundsResponseData
    {
      public IEnumerable<InvestmentFundsResponse> Data { get; set;}
    }

    public class InvestmentFundsResponse
    {
      public Guid Id { get; set; }
    }

CodePudding user response:

JsonSerializer.Deserialize does not use JsonSerializerOptions which are configured by AddJsonOptions, create and pass required options manually (possibly resolve ones from the DI via JsonOptions):

var result = JsonSerializer.Deserialize<InvestimentFundsResponseData>(content, new JsonSerializerOptions
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
    Converters = {new JsonStringEnumConverter()},
    IgnoreNullValues = true
});
  • Related