Asp.net core 3'te json serializer ayarları nasıl yapılır?


29

Eski asp.net çekirdek uygulamaları için json serileştirici ayarları ekleyerek kuruldu AddMvc().AddJsonOptions(), ama kullanmayın AddMvc()içinde asp.net core 3. Peki global json serileştirme ayarlarını nasıl ayarlayabilirim?


Eğer kullanmıyorsanız AddMvcne yapmak kullandığınız? Örneğin mi kullanıyorsunuz AddControllersyoksa sadece MVC kullanmıyor musunuz?
Kirk Larkin

@KirkLarkin asp.net core 3 uygulaması oluşturmanın varsayılan yolunu kullanıyorum - app.UseEndpoints(endpoints => { endpoints.MapControllers() })veservices.AddControllers();
Alex Zaitsev

Tamam, ben kullandığınız tahmin yüzden AddControllersde ConfigureServicessağa?
Kirk Larkin

@KirkLarkin, evet, sağ
Alex Zaitsev

Yanıtlar:


27

AddMvcIMvcBuilderkarşılık gelen bir AddJsonOptionsuzantı yöntemine sahip bir uygulama döndürür . Yeni tarzı yöntemleri AddControllers, AddControllersWithViewsve AddRazorPagesaynı zamanda bir iade IMvcBuilderuygulaması. Bunlarla aynı şekilde zincirleme AddMvc:

services.AddControllers()
    .AddJsonOptions(options =>
    {
        // ...
    });

Not o optionsburada ama daha yeni için, artık Json.NET içindir System.Text.JsonAPI'ler. Hala Json.NET kullanmak istiyorsanız, timtam'ın cevabına bakınız.



"Options.JsonSerializerOptions.IgnoreNullValues ​​= true;" ekleniyor etkisi olmadı
zion

1
Enum dönüşümünü arayan bu sayfaya ulaşan diğer kullanıcılara: [JsonConverter (typeof (JsonStringEnumConverter))]] kamu numaralandırma SomeEnum
Rafał Praniuk

23

Seçenek A. AddControllers

Bu hala MVC ve Microsoft.AspNetCore.Mvc.NewtonsoftJson nuget paketi gerektirir, ancak kullandığınızı söylediniz AddControllers.

Gönderen Ekleme Newtonsoft.Json merkezli JSON biçimi desteği

services.AddControllers().AddNewtonsoftJson(options =>
{
    // Use the default property (Pascal) casing
    options.SerializerSettings.ContractResolver = new DefaultContractResolver();

    // Configure a custom converter
    options.SerializerOptions.Converters.Add(new MyCustomJsonConverter());
});

Seçenek B.VarsayılanAyarlar

JsonConvert.DefaultSettings = () => new JsonSerializerSettings (...)

JsonConvert.DefaultSettings Özelliği

Varsayılan JsonSerializerSettings oluşturan bir işlevi alır veya ayarlar. Varsayılan ayarlar otomatik olarak JsonConvert üzerindeki serileştirme yöntemleri ve JToken'deki ToObject () ve FromObject (Object) tarafından kullanılır. Herhangi bir varsayılan ayarı kullanmadan serileştirmek için Create () ile bir JsonSerializer oluşturun.


Merhaba, bu ayarları Json.NET düzeyinde ayarlar, ASP.NET düzeyinde nasıl yapılabilir?
Alex Zaitsev

ASP.NET düzeyinde ayarları yapılandırır, yani varsayılan ModelBinding artık NewtonsoftJson serileştirici kullanılarak gerçekleşir.
MrClan

Teşekkürler, Seçenek A benim için çalıştı. 2.2'den 3.1'e yükseltildi ve uç noktam kırıldı çünkü System.Text.Jsonpolimorfizmi veya numaralandırmaları düzgün işlemiyor. Varsayılan serileştiriciyi değiştirmenin güzel kolay yolu.
static_void

15

.Net Core 3.0 projesine Newtonsoft uyumluluk paketlerinin eklenmesi ile ilgili oldukça sorun var.

Ayrıca bkz. Https://github.com/aspnet/AspNetCore/issues/13564

Tabii ki, bir mülk adlandırmayı kutlamak istiyorum PascalCaseSo ... an, NA nulliçin PropertyNamingPolicyaraçlar belli ki çok iyi değil, PascalCase.

// Pascal casing
services.AddControllersWithViews().
        AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
            options.JsonSerializerOptions.PropertyNamingPolicy = null;
        });
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.