Enum प्रकार अब .Net कोर 3.0 FromBody अनुरोध ऑब्जेक्ट में काम नहीं कर रहा है


14

मैंने हाल ही में अपने वेब एप को .Net कोर 2.2 से .Net कोर 3.0 में अपग्रेड किया है और देखा है कि मेरे अनुरोधों को अब एक त्रुटि मिल रही है जब मैं एक पोस्ट में एक एनम को अपने समापन बिंदु पर पास करता हूं। उदाहरण के लिए:

मैं अपने एपीआई समापन बिंदु के लिए निम्नलिखित मॉडल है:

    public class SendFeedbackRequest
    {
        public FeedbackType Type { get; set; }
        public string Message { get; set; }
    }

जहां फीडबैक टाइप दिखता है:

    public enum FeedbackType
    {
        Comment,
        Question
    }

और यह नियंत्रक विधि है:

    [HttpPost]
    public async Task<IActionResult> SendFeedbackAsync([FromBody]SendFeedbackRequest request)
    {
        var response = await _feedbackService.SendFeedbackAsync(request);

        return Ok(response);
    }

जहाँ मैं इसे कंट्रोलर को पोस्ट बॉडी के रूप में भेजता हूँ:

{
    message: "Test"
    type: "comment"
}

और मुझे अब इस समापन बिंदु पर निम्नलिखित त्रुटि पोस्टिंग मिल रही है:

The JSON value could not be converted to MyApp.Feedback.Enums.FeedbackType. Path: $.type | LineNumber: 0 | BytePositionInLine: 13."

यह 2.2 में काम कर रहा था और 3.0 में त्रुटि शुरू कर दिया। मैंने 3.0 में जस के धारावाहिक को बदलने के बारे में बात की थी, लेकिन यह निश्चित नहीं था कि इसे कैसे संभाला जाए।

जवाबों:


18

फ्रेमवर्क अब डिफ़ॉल्ट रूप से Json.Net का उपयोग नहीं करता है और नए अंतर्निहित धारावाहिक में अपने स्वयं के मुद्दे हैं और अपेक्षित सुविधाओं को प्राप्त करने के लिए सीखने की अवस्था है।

यदि आप उपयोग करने के पिछले डिफ़ॉल्ट पर वापस जाना चाहते हैं Newtonsoft.Json, तो आपको निम्नलिखित कार्य करने होंगे:

  1. Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet पैकेज स्थापित करें ।

  2. में ConfigureServices()एक कॉल जोड़ने के लिएAddNewtonsoftJson()

public void ConfigureServices(IServiceCollection services) {
    //...

    services.AddControllers()
        .AddNewtonsoftJson(); //<--

    //...
}

3
मैं बताना चाहता हूं कि दोनों कदम उठाने होंगे। जो काफी स्पष्ट है, लेकिन अगर आप Nuget पैकेज को भूल जाते हैं और केवल "AddNewtonsoftJson ()" जोड़ते हैं, तो आपका कोड संकलित करता है और ठीक चलता है, जबकि यह काम नहीं करता है।
जीन-पॉल स्मिट

17

उन लोगों के लिए जो एक स्निपेट की तलाश में हैं

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers().AddJsonOptions(opt =>
    {
        opt.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
    });
}

6

यदि आप अंतर्निहित JsonStringEnumConverter में उपयोग करते हैं और JsonSerializerOptions में पास करते हैं, तो स्ट्रिंग्स के रूप में सीरीज़िंग के लिए समर्थन पहले से मौजूद हैं। https://docs.microsoft.com/en-us/dotnet/pi/system.text.json.serialization.jsonstringenumconconconumum ? दृश्य = Netcore-3.0

यहाँ एक नमूना परीक्षण किया गया है जो इसका उपयोग करता है: https://github.com/dotnet/corefx/blob/master/src/System.Text.Json/tests/Serialization/ReadScenarioTests.cs#1717


1
जो लोग JsonStringEnumConverter को JsonSerialzerOptions में पास करना नहीं जानते हैं, उनके लिए यहां कोड हैं:services.AddMvc() .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); options.JsonSerializerOptions.IgnoreNullValues = true; });
एंथनी हुआंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.