এনাম টাইপ আর কাজ করে না। নেট কোর 3.0 3.0 থেকে বডি অনুরোধ অবজেক্ট


14

আমি সম্প্রতি আমার ওয়েব এপিআই। নেট কোর ২.২ থেকে নেট নেট 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."

এটি ২.২ এ কাজ করে এবং 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
আমি উভয় পদক্ষেপ নিতে হবে তা নির্দেশ করতে চাই। যা পুরোপুরি সুস্পষ্ট, তবে আপনি যদি ন্যুগেট প্যাকেজটি ভুলে যান এবং কেবল "অ্যাডনিউটনসফটজসন ()" যোগ করেন তবে আপনার কোডটি সংকলন করে ঠিক ঠিক চলে, যদিও এটি কার্যকর হয় না work
জিন-পল স্মিট

17

যারা স্নিপেট খুঁজছেন তাদের জন্য

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

6

স্ট্রিংগুলি ইতিমধ্যে বিদ্যমান হিসাবে স্ট্রিংগুলির জন্য সমর্থন যদি আপনি অন্তর্নির্মিত জসনস্ট্রিংইউনম কনভার্টার ব্যবহার করেন এবং এটি জসনসরিয়ালঅ্যাপশনগুলিতে পাস করেন: https://docs.microsoft.com/en-us/dotnet/api/system.text.json.serialization.jsonstringenumconverter ? দৃশ্য = netcore -3.0

এখানে একটি নমুনা পরীক্ষা রয়েছে যা এটি ব্যবহার করে: https://github.com/dotnet/corefx/blob/master/src/System.Text.Json/tests/Serialization/ReadScenarioTests.cs#L17


1
যারা জসনস্ট্রিয়ালঅ্যাপশনগুলিতে জসনস্ট্রিংএনম কনভার্টারটি পাস করতে জানেন না তাদের জন্য এখানে কোডটি দেওয়া হয়েছে:services.AddMvc() .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); options.JsonSerializerOptions.IgnoreNullValues = true; });
অ্যান্থনি হুয়াং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.