IMvcBuilder AddJsonOptions ने कहां जाना है .Net Core 3.0?


119

मैंने अभी अपनी ASP वेब API परियोजना को अपग्रेड किया है। Net core 2.0को 3.0। मैं उपयोग कर रहा था

     services.AddMvc()
             .AddJsonOptions(options =>options.SerializerSettings.ContractResolver 
                                       = new DefaultContractResolver());

पहले से क्रमबद्ध JSON के निचले आवरण को सुनिश्चित करने के लिए।

3.0 में अपग्रेड के बाद मुझे यह त्रुटि मिली:

CS1061 त्रुटि 'IMvcBuilder' में 'AddJsonOptions' के लिए कोई परिभाषा नहीं है और कोई सुलभ एक्सटेंशन विधि 'AddJsonOptions' नहीं है जो 'IMvcBuilder' प्रकार के पहले तर्क को स्वीकार कर पाया हो (क्या आप एक निर्देश या विधानसभा संदर्भ का उपयोग करके गायब हैं?)

Asp.Net Core 2.2 में MvcJsonOptions के लिए AddJsonOptions के अनुसार AddJsonOptions एक्सटेंशन विधि Microsoft.AspNetCore.Mvc.Formatters.Json नगेट पैकेज द्वारा प्रदान की गई है । मैंने इसे स्थापित / पुन: स्थापित करने का प्रयास किया है लेकिन फिर भी विधि को हल नहीं कर सकता। दिलचस्प है, इंटेलीजेंस केवल Microsoft.AspNetCore.Mvc.Formatters दिखाता है। Xml जब मैं कथन का उपयोग भले ही मैंने जोड़ा जोड़ने की कोशिश Json nuget पैकेज।

कुछ पता है कि क्या चल रहा है? प्रलेखन के लिए AddJsonOptions केवल नेट 2.2 अप करने के लिए चला जाता है तो शायद विधि कुछ अन्य विन्यास तंत्र के पक्ष में 3.0 में पदावनत किया गया है?

जवाबों:


203

ASP.NET Core 3.0 के भाग के रूप में, टीम डिफ़ॉल्ट रूप से Json.NET सहित दूर चली गई। आप Microsoft.AspNetCore.App पर परिवर्तनों को तोड़ने की घोषणा में सामान्य रूप से इसके बारे में अधिक पढ़ सकते हैं ।

Json.NET के बजाय ASP.NET Core 3.0 और .NET Core 3.0 में एक अलग JSON API शामिल है जो प्रदर्शन पर थोड़ा अधिक ध्यान केंद्रित करता है। आप घोषणा के बारे में और अधिक जान सकते हैं ".NET कोर 3.0 में JSON का भविष्य" के बारे में

ASP.NET Core के लिए नए टेम्प्लेट Json.NET के साथ बंडल नहीं करेंगे लेकिन आप नए JSON लाइब्रेरी के बजाय इसका उपयोग करने के लिए प्रोजेक्ट को आसानी से पुन: कॉन्फ़िगर कर सकते हैं। यह पुरानी परियोजनाओं के साथ संगतता के लिए महत्वपूर्ण है और इसलिए भी कि नई लाइब्रेरी को पूर्ण प्रतिस्थापन नहीं माना जाता है, इसलिए आपको वहां पूर्ण सेट नहीं दिखाई देगा।

JSON.NET के साथ अपने ASP.NET Core 3.0 प्रोजेक्ट को फिर से कॉन्फ़िगर करने के लिए, आपको एक NuGet संदर्भ जोड़ना होगा Microsoft.AspNetCore.Mvc.NewtonsoftJson, जो कि वह पैकेज है जिसमें सभी आवश्यक बिट्स शामिल हैं। फिर, स्टार्टअप में ConfigureServices, आपको MVC को इस तरह कॉन्फ़िगर करना होगा:

services.AddControllers()
    .AddNewtonsoftJson();

यह MVC नियंत्रकों को सेट करता है और उस नए एपीआई के बजाय Json.NET का उपयोग करने के लिए इसे कॉन्फ़िगर करता है। नियंत्रकों के बजाय, आप एक अलग MVC अधिभार (उदाहरण के लिए, या रेजर पृष्ठों वाले नियंत्रकों के लिए) का उपयोग कर सकते हैं। उस AddNewtonsoftJsonविधि में एक अधिभार है जो आपको AddJsonOptionsASP.NET Core 2.x में आपके द्वारा उपयोग किए गए Json.NET विकल्पों को कॉन्फ़िगर करने की अनुमति देता है ।

services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.ContractResolver = new DefaultContractResolver();
    });

41
घर पर साथ आने वालों के लिए ... किसी प्रोजेक्ट को माइग्रेट करते समय आपको "AddNewtonsoftJson" एक्सटेंशन प्राप्त करने के लिए "Microsoft.AspNetCore.Mvc.NewtonsoftJson" में एक नगेट संदर्भ जोड़ने की आवश्यकता हो सकती है। यदि आप Visual Studio Nuget मैनेजर का उपयोग कर रहे हैं, तो यह लिखने के लिए "प्रीरिलिट्स शामिल करें" की आवश्यकता होती है।
नीलचामुल्लेन

1
ध्यान दें कि मैं आम तौर पर अभी तक वास्तविक अनुप्रयोगों के साथ ASP.NET Core 3 की ओर पलायन करने की सलाह नहीं दूंगा। यदि आप बस के आसपास खेलना चाहते हैं, तो सुनिश्चित करें, लेकिन अंतिम रिलीज से पहले कुछ चलती बिट्स हैं, इसलिए आपको इसे ध्यान में रखना होगा यदि आप इसे जल्दी से माइग्रेट करना चाहते हैं।
प्रहार

1
यह ट्रिगर कर सकता है "तुल्यकालिक संचालन बंद हो गए हैं" चेक stackoverflow.com/questions/47735133/… अधिक जानकारी के लिए
verbedr

8
मेरे लिए AddNewtonsoftJsonवह Microsoft.AspNetCore.Mvc.NewtonsoftJsonसंदर्भ गायब होने के बाद भी गायब है ।
सईद नेमाटी

2
@avenmore नया धारावाहिक विशेषताओं के एक अलग सेट का उपयोग करता है। आप नाम स्थान [JsonIgnore]से उपयोग कर सकते हैं System.Text.Json.Serialization
प्रहार

21

यह मेरे लिए काम करते हुए, उपयोग करते समय .Net Core 3:

services.AddMvc().AddJsonOptions(o =>
{
    o.JsonSerializerOptions.PropertyNamingPolicy = null;
    o.JsonSerializerOptions.DictionaryKeyPolicy = null;
});

मुझे लगता है कि रेखा होनी चाहिए:o.JsonSerializerOptions.PropertyNameCaseInsensitive = false;
ग्रैंडर

1
मुझे भी हाँ, लेकिन यह नहीं है। इस जवाब ने मेरे लिए काम किया।
मार्टिन

2
के लिए कोई ज़रूरत नहीं है o.JsonSerializerOptions.DictionaryKeyPolicy = null;औरo.JsonSerializerOptions.PropertyNameCaseInsensitive = false;
Shahar Shokrani

काश मैं इस उत्तर का उपयोग कर सकता, लेकिन मेरा आवेदन न्यूटनसॉफ्ट विशेषताओं का उपयोग करके बनाया गया था, जिसे नए एमएस धारावाहिक को अनदेखा करता है, जिसका अर्थ है कि मुझे न्यूटनसॉफ्ट धारावाहिक को एड-न्यूटनसॉफ्टजॉन के साथ उपयोग करना जारी रखना होगा। शायद MS न्यूटनसॉफ्ट विशेषताओं का सम्मान करने के लिए एक विकल्प जोड़ सकता है, जबकि अभी भी प्रदर्शन लाभ प्राप्त कर रहे हैं जो वे आशाजनक हैं।
एरिक

@रिक हां आप सही हैं लेकिन, अधिकांश स्थितियों के लिए न्यूटनसॉफ्ट का प्रदर्शन पर्याप्त है।
मोहम्मद ओलफेटमीर

0

इससे मदद मिलेगी

public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers().AddJsonOptions(options=> {  options.JsonSerializerOptions.PropertyNamingPolicy = null;
                 options.JsonSerializerOptions.DictionaryKeyPolicy = null;

            });

            services.AddDbContext<PaymentDetailContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DevConnection")));
        }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.