JSON गुण अब एएसपी .Net कोर 1.0.0-rc2- फाइनल से 1.0.0 तक स्वैप पर कम मामला है


90

मैंने अभी-अभी ASP .Net Core 1.0.0-rc2-final से 1.0.0 तक हमारे प्रोजेक्ट की अदला-बदली की है। JSON प्रॉपर्टीज़ के कैपिटलाइज़ेशन के कारण हमारी वेबसाइट और क्लाइंट ने काम करना बंद कर दिया है। उदाहरण के लिए, जावास्क्रिप्ट की यह रेखा अब विफल हो गई है

for (var i = 0; i < collection.Items.length; i++){

क्योंकि नियंत्रक अब "आइटम" के बजाय सरणी "आइटम" कहता है। मैंने अपडेट किए गए पैकेजों को स्थापित करने और Project.json फ़ाइल को संपादित करने से परे कोई बदलाव नहीं किया है। मैंने C # मॉडल फ़ाइलों को नहीं बदला है जो अभी भी उनके गुणों को बड़ा करती हैं।

ASP.Net कोर नियंत्रकों ने JSON को कम आवरण वाले गुणों के साथ वापस क्यों शुरू किया है? मैं मॉडल से संपत्ति के नाम के मामले का सम्मान करते हुए उनके पास वापस कैसे जाऊं?



2
आप .Net Core 3 के उत्तर की तलाश करने वालों के लिए आपको पृष्ठ के नीचे स्क्रॉल करने की आवश्यकता है।
माइक डेवेननी

जवाबों:


156

MVC अब JSON को डिफ़ॉल्ट रूप से ऊंट मामले के नामों के साथ क्रमबद्ध करता है

डिफ़ॉल्ट रूप से ऊंट मामले के नामों से बचने के लिए इस कोड का उपयोग करें

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

स्रोत: https://github.com/aspnet/Announcements/issues/194


8
netcore2: Newtonsoft.Json.Serialization का उपयोग करना;
david.barkhuizen

3
मैं अपने सभी JSON सीरियललाइज़ेशन को बदलना नहीं चाहता , सिर्फ एक विशेष मामला जिसे कुछ तृतीय-पक्ष सॉफ़्टवेयर के व्यवहार से मेल खाना चाहिए। Json()कॉल के दूसरे पैरामीटर में कोई सही क्रमांकन सेटिंग्स कैसे प्रदान करता है ?
शुभ अंक

79

मामले में आपको यह Google से मिला और कोर 3 के लिए एक समाधान की तलाश में।

कोर 3 का उपयोग करता है System.Text.Json, जो डिफ़ॉल्ट रूप से मामले को संरक्षित नहीं करता है। जैसा कि इस GitHub मुद्दे के साथ उल्लेख किया गया है , PropertyNamingPolicyअशक्त को स्थापित करने से समस्या ठीक हो जाएगी।

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

और यदि आप वैश्विक सेटिंग्स को बदलना नहीं चाहते हैं, तो केवल एक कार्रवाई के लिए यह इस तरह है:

return Json(obj, new JsonSerializerOptions { PropertyNamingPolicy = null });

8
तुम मेरे स्वामी और उद्धारकर्ता हो
जॉन्टी मॉरिस

1
इसने कोर 3.1 पर मेरे लिए अच्छा काम किया। मैं अपने केंडो घटकों को ठीक से काम करने के लिए नहीं मिला और पाया जा सकता है कि ऊंट मामले को स्वरूपित किया गया था। इससे समस्या हल हो गई।
वारगी

मैं आपका विषय भी हूँ
जोआओ लौरेइरो


9

उन लोगों के लिए जो कोर 3.1 में चले गए और कोर एमवीसी प्रोजेक्ट स्टार्टअप में निम्न कोड का उपयोग कर सकते हैं।


        public void ConfigureServices(IServiceCollection services)
        {
            ...
            services.AddControllersWithViews().AddJsonOptions(opts => opts.JsonSerializerOptions.PropertyNamingPolicy = null);
            ...
        }

यह एक पूर्व उत्तर के रूप में ही है stackoverflow.com/a/58187836/125981
मार्क Schultheiss

@MarkSchultheiss आप शायद सही हैं, क्योंकि मेरा उत्तर अन्य सभी के समान है, हालांकि, जब मैं अपने प्रोजेक्ट प्रकार के आधार पर उचित उत्तर खोज रहा था, जो कि एमवीसी विचारों का उपयोग कर रहा है, तो मुझे अपनी परियोजना से मेल खाते हुए सटीक उत्तर नहीं मिला। AddControllersWithViews () उन लापता टुकड़े को जोड़ता है, और मुझे लगा कि यह भविष्य में किसी के लिए भी उपयोगी होगा। हालांकि आपकी टिप्पणी के लिए धन्यवाद!
यूवाई

3

यह इसे डॉटनेट कोर 3 वेबापी में ठीक कर देगा, ताकि यह आपकी संपत्ति के नाम को बिल्कुल भी न बदले, और आप अपने ग्राहक के पास ठीक उसी तरह लौट आएं, जैसा आप चाहते थे।

Startup.cs में:

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

यह एक पूर्व उत्तर के रूप में ही है stackoverflow.com/a/58187836/125981
मार्क Schultheiss

1

कुछ के लिए जो ASP.net WEB API (ASP.NET Core के बजाय) का उपयोग कर रहा है।

इस लाइन को अपने WebApiConfig में जोड़ें।

//Comment this jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

jsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();

इसे एक उत्तर के रूप में यहाँ जोड़ा जा रहा है क्योंकि यह वेब एपी के लिए Google खोज में सबसे पहले आता है।


0

कोर 2.x संस्करणों के लिए, इस कोड का उपयोग करके आप डिफ़ॉल्ट रूप से ऊंट मामले के नामों से बच सकते हैं। आपको Startup.cs फ़ाइल के कॉन्फ़िग सर्वर विधि के अंदर निम्नलिखित कोड जोड़ने की आवश्यकता है।

services.AddMvc()
.AddJsonOptions(o =>
{
    if (o.SerializerSettings.ContractResolver != null)
    {
        var castedResolver = o.SerializerSettings.ContractResolver
        as DefaultContractResolver;

        castedResolver.NamingStrategy = null;
    }
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.