এএসপি.নেট কোর 3.0 সিস্টেম.টেক্সট.জেসন ক্যামেলের কেস সিরিয়ালাইজেশন


19

এএসপি.নেট কোর 3.0.০ ওয়েব এপিআই প্রকল্পে, আপনি কীভাবে সিস্টেম.টেক্সট.জেসন সিরিয়ালাইজেশন বিকল্পগুলি প্যাসল কেস বৈশিষ্ট্যগুলি উটের মামলায় সিরিয়ালাইজ / ডিসায়ারাইজ করতে এবং স্বয়ংক্রিয়ভাবে উল্টাতে চান?

পাস্কাল কেস বৈশিষ্ট্যগুলির সাথে মডেল দেওয়া যেমন:

public class Person
{
    public string Firstname { get; set; }
    public string Lastname { get; set; }
}

এবং জাসন স্ট্রিংকে Personশ্রেণীর ধরণের ডিজিটালাইজ করতে সিস্টেম.টেক্সট.জসন ব্যবহার করার কোড :

var json = "{\"firstname\":\"John\",\"lastname\":\"Smith\"}";
var person = JsonSerializer.Deserialize<Person>(json);

JsonPropertyName প্রতিটি সম্পত্তি যেমন যেমন ব্যবহার না করা হয় তবে সাফল্যের সাথে deserialize হয় না:

public class Person
{
    [JsonPropertyName("firstname")
    public string Firstname { get; set; }
    [JsonPropertyName("lastname")
    public string Lastname { get; set; }
}

আমি নিম্নলিখিতগুলি চেষ্টা করে দেখেছি startup.cs, তবে এটি এখনও প্রয়োজনের দিক থেকে কার্যকর হয়নি JsonPropertyName:

services.AddMvc().AddJsonOptions(options =>
{
    options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;
    options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
});

// also the following given it's a Web API project

services.AddControllers().AddJsonOptions(options => {
    options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;
    options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
        });

নতুন সিস্টেম.টেক্সট.জসন নেমস্পেস ব্যবহার করে আপনি কীভাবে এএসপি.নেট কোর 3.0 এ ক্যামেল কেস সিরিয়ালাইজ / ডিসরিয়ালাইজ সেট করতে পারেন?

ধন্যবাদ!

উত্তর:


25

AddJsonOptions()System.Text.Jsonশুধুমাত্র এমভিসি জন্য কনফিগার করা হবে । আপনি যদি JsonSerializerনিজের কোডটিতে ব্যবহার করতে চান তবে আপনার এটিতে কনফিগারেশনটি পাস করা উচিত।

var options = new JsonSerializerOptions
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
};

var json = "{\"firstname\":\"John\",\"lastname\":\"Smith\"}";
var person = JsonSerializer.Parse<Person>(json, options);

সিস্টেম.টেক্সট.জসনের সাথে পুরো প্রকল্প / অ্যাপ্লিকেশনটির জন্য সিরিয়ালাইজেশন বিকল্পগুলি নির্দিষ্ট করার কোনও উপায় নেই? এটি সিস্টেম.টেক্সট.জসনের আগে তুচ্ছ ছিল
আলেকজান্ডার স্টারোসেলস্কি

আমি তাই মনে করি না. আপনার সেটিংসটি পাস করতে হবে
কাহবাজি


11

ইন startup.cs:

// keeps the casing to that of the model when serializing to json (default is converting to camelCase)
services.AddMvc()
    .AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null); 

এর অর্থ আপনাকে newtonsoft.json আমদানি করতে হবে না।

শুধু অন্যান্য বিকল্প options.JsonSerializerOptions.PropertyNamingPolicyনেই JsonNamingPolicy.CamelCaseJsonNamingPolicyস্নাপকেস বা পাস্কেল কেস এর মতো অন্য কোনও নামকরণ নীতি বিকল্প নেই বলে মনে হয় ।


এটি আমার পক্ষে কাজ করেছে। এফটিআর, আমার এর আগে আমার পরিষেবাগুলিতে .AdmMvc () ছিল না, কেবল এটি যুক্ত করে যাতে অ্যাডজসনঅ্যাপশন যুক্ত করা যায়। আমার সমস্ত সার্ভার-ক্লায়েন্ট সিরিয়ালকরণের সমস্যাগুলি চলে গেল .....
মার্ক ল্যাজ

10

আপনি ব্যবহার করতে পারেন PropertyNameCaseInsensitive। আপনাকে এটি ডিসরিয়ালাইজারের পরামিতি হিসাবে পাস করতে হবে।

var json = "{\"firstname\":\"John\",\"lastname\":\"Smith\"}";
var options = new JsonSerializerOptions() { PropertyNameCaseInsensitive = true };
var person = JsonSerializer.Deserialize<Person>(json, options);

যা ( ডক্স থেকে ):

একটি মান পাওয়া বা সেট করে যা নির্ধারণ করে যে কোনও সম্পত্তির নামটি ডিসিশ্রাইজেশনের সময় কেস-সংবেদনশীল তুলনা ব্যবহার করে কিনা। ডিফল্ট মান মিথ্যা

সুতরাং, এটি উটকেস বা পাস্কেলকেস নির্দিষ্ট করে না তবে এটি কেস-সংবেদনশীল তুলনা ব্যবহার করবে। এটি আপনার প্রয়োজনীয়তা পূরণ করে কিনা তা নিশ্চিত নয়।


দ্রষ্টব্য: আমি কোনও কনসোল অ্যাপ্লিকেশনটিতে এই অ্যাপ্লিকেশনটিকে প্রশস্ত করতে সক্ষম হইনি। হিসাবে উল্লেখ করা Kahbazi এর উত্তর services.AddMvc().AddJsonOptions এবং services.AddControllers().AddJsonOptionsশুধুমাত্র MVC এবং WebApi কনট্রোলারের জন্য JSON কনফিগার করবে (যেমন হবে না কনসোল অ্যাপ্লিকেশানে JSON সেটিংস আবেদন প্রশস্ত, উদাহরণস্বরূপ কনফিগার)। নীচে কেবলমাত্র সিস্টেম.টেক্সট.জসনকে একটি কনট্রোলার সমাপ্তিদ্বীপ পেরিয়ে জেসনের জন্য কনফিগার করবে:

services.AddControllers()
        .AddJsonOptions(options => {
            options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
         }); 

6

আপনি যদি ক্যামেলকেস সিরিয়ালাইজেশন চান তবে এই কোডটি স্টার্টআপ.স এ ব্যবহার করুন : (উদাহরণস্বরূপ প্রথম নাম)

services.AddControllers()
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
        });

আপনি যদি পাস্কেলকেস সিরিয়ালাইজেশন চান তবে এই কোডটি স্টার্টআপ.স এ ব্যবহার করুন : (উদাহরণস্বরূপ ফার্স্টনেম)

services.AddControllers()
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNamingPolicy= null;
        );

4

আপনি এখনও মাইক্রোসফ্ট.এএসপনেটকোর.এমভিসি.নউভটনসফটজসন নুগেট প্যাকেজ ইনস্টল করে এটি অ্যাপ্লিকেশনটিকে বৃহত্তর সেট করতে পারেন, যা আপনাকে পূর্ববর্তী জসন সিরিয়ালাইজার প্রয়োগের জন্য অনুমতি দেয়:

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

পোকে ক্রেডিট, উত্তর এখানে পাওয়া গেছে: আইএমভিসি বিল্ডার অ্যাডজসনঅ্যাপশনস। নেট কোর 3.0 কোথায় গেল?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.