Asp.net core 3 में json serializer सेटिंग कैसे सेट करें?


29

विरासत asp.net कोर अनुप्रयोगों के लिए json serializer सेटिंग्स जोड़कर निर्धारित किया गया AddMvc().AddJsonOptions()है, लेकिन मैं का उपयोग नहीं करते AddMvc()में asp.net core 3। तो मैं ग्लोबल जसन क्रमांकन सेटिंग कैसे सेट कर सकता हूं?


यदि आप उपयोग नहीं करते हैं AddMvc, तो आप क्या उपयोग करते हैं? क्या आप उदाहरण के लिए उपयोग AddControllersकर रहे हैं या आप सिर्फ MVC का उपयोग नहीं कर रहे हैं?
कर्क लार्किन

@KirkLarkin मैं asp.net कोर 3 ऐप के निर्माण के डिफ़ॉल्ट तरीके का उपयोग करता हूं - app.UseEndpoints(endpoints => { endpoints.MapControllers() })औरservices.AddControllers();
एलेक्स ज़ैतसेव

ठीक है, इसलिए मुझे लगता है कि आप सही AddControllersमें उपयोग कर रहे हैं ConfigureServices?
कर्क लार्किन

@KirkLarkin, हाँ, सही है
एलेक्स

जवाबों:


27

AddMvcएक IMvcBuilderकार्यान्वयन लौटाता है, जिसमें एक समान AddJsonOptionsविस्तार विधि होती है। नई शैली के तरीकों AddControllers, AddControllersWithViewsऔर AddRazorPagesयह भी एक वापसी IMvcBuilderकार्यान्वयन। उसी तरह इनसे चेन करें जिस तरह से आप के साथ चेन करेंगे AddMvc:

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

ध्यान दें कि optionsअब Json.NET के लिए नहीं है, लेकिन नए System.Text.JsonAPIs के लिए। यदि आप अभी भी Json.NET का उपयोग करना चाहते हैं, तो tymtam का उत्तर देखें



"विकल्प जोड़ें। JsonSerializerOptions.IgnoreNullValues ​​= true;" कोई प्रभाव नहीं पड़ा
सिय्योन

1
एनम रूपांतरण की तलाश में इस पृष्ठ को हिट करने वाले अन्य लोगों के लिए: [JsonConverter (टाइपोफ़ (JsonStringEnumConverter))] सार्वजनिक एनम SomeEnum
Rafał Praniuk

23

विकल्प A. AddControllers

यह अभी भी MVC है, और इसके लिए Microsoft.AspNetCore.Mvc.NewtonsoftJson नगेट पैकेज की आवश्यकता है, लेकिन आपने कहा था कि आप इसका उपयोग करते हैं AddControllers

से जोड़ें Newtonsoft.Json आधारित JSON प्रारूप समर्थन

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());
});

विकल्प बी। डिफ़ॉल्ट

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

JsonConvert.DefaultSettings संपत्ति

एक समारोह हो जाता है या डिफ़ॉल्ट JsonSerializerSettings बनाता है। डिफ़ॉल्ट सेटिंग्स स्वचालित रूप से JsonConvert, और ToObject () और FromObject (ऑब्जेक्ट) JToken पर क्रमांकन विधियों द्वारा उपयोग की जाती हैं। किसी भी डिफ़ॉल्ट सेटिंग्स का उपयोग किए बिना अनुक्रमित करने के लिए बनाएँ () के साथ एक JsonSerializer बनाएं।


नमस्ते, यह Json.NET स्तर पर सेटिंग्स सेट करता है, यह ASP.NET स्तर पर कैसे किया जा सकता है?
एलेक्स ज़िटसेव

यह ASP.NET स्तर पर सेटिंग्स को कॉन्फ़िगर करता है, जिसका अर्थ है कि डिफ़ॉल्ट मॉडलबाइंडिंग अब NewtonsoftJson धारावाहिक का उपयोग करके होता है।
मि। क्लान

धन्यवाद, विकल्प ए ने मेरे लिए काम किया। 2.2 से 3.1 तक अपग्रेड किया गया और मेरा समापन बिंदु टूट गया क्योंकि System.Text.Jsonयह पॉलीमॉर्फिज्म या एनम को ठीक से नहीं संभालता है। डिफ़ॉल्ट धारावाहिक को बदलने का अच्छा आसान तरीका।
static_void

15

Newtonsoft जोड़ना आवश्यक नहीं है, .net Core 3.0 परियोजना पर Newtonsoft संगतता पैकेजों को जोड़ने के साथ काफी समस्याएं हैं।

Https://github.com/aspnet/AspNetCore/issues/13564 भी देखें

बेशक, एक संपत्ति नामकरण का जश्न मनाने जाएगा PascalCaseपल में, एनए ... तो nullके लिए PropertyNamingPolicyसाधन PascalCase, जो स्पष्ट रूप से बहुत अच्छा नहीं है।

// Pascal casing
services.AddControllersWithViews().
        AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
            options.JsonSerializerOptions.PropertyNamingPolicy = null;
        });
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.