কীভাবে জসন.নেটকে বিশ্বব্যাপী সমস্ত এনগ্রামগুলিতে স্ট্রিংএইনম কনভার্টার প্রয়োগ করতে বলা যায়


84

আমি তাদের স্ট্রিং প্রতিনিধিত্বতে গণনাগুলি deserialize করতে চাই এবং json.net এর সাথে বিপরীতে। কাঠামোটি প্রয়োগ করতে বলার একমাত্র উপায় StringEnumConverterহ'ল এই জাতীয় প্রশ্নগুলিতে বৈশিষ্ট্যগুলি বর্ননা করা:

[JsonConverter(typeof(StringEnumConverter))]
public virtual MyEnums MyEnum { get; set; }

যাইহোক, আমার ব্যবহারের ক্ষেত্রে, json.net বিশ্বব্যাপী কনফিগার করা আরও সুবিধাজনক হবে যে সমস্ত এনওমিরেশনগুলি StringEnumConverterঅতিরিক্ত টীকা ছাড়াই সিরিয়ালায়িত (ডি) করে ।

এটি করার কোনও উপায় আছে, যেমন কাস্টমসের সাহায্যে JsonSerializerSettings?

উত্তর:


113

একটি যোগ করুন StringEnumConverterথেকে JsonSerializerSettingsকনভার্টার সংগ্রহ।

ডকুমেন্টেশন: জসনকনভার্টারের সাথে সিরিয়াল করুন


আপনি যদি সিরিয়ালাইজারটি উট কেসিং ব্যবহার করতে চান তবে আপনি এটিও সেট করতে পারেন:

SerializerSettings.Converters.Add(
    new StringEnumConverter { CamelCaseText = true });

এটি সিরিয়ালাইজ SomeValueহবে someValue


আমি আমার Global.asax.cs এর অধীনে এটি সেট করার চেষ্টা করেছি GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettingsকিন্তু কার্যকর হয়নি। কোন ধারণা কেন হতে পারে?
এএম হয়েছে

মাঠের নাম লোয়ার-কেস করার কোনও উপায় আছে কি? ক্যামেলকেসেক্সট পতাকাটি ক্লাসে কঠোরভাবে কোডড রয়েছে এবং আমি একটি পৃথক কেসিং কৌশল ব্যবহার করার উপায় দেখছি না।
মাইকব্রিজ

@ মাইকব্রিজ আপনি কি এর সমাধান খুঁজে পেয়েছেন? এছাড়াও প্রতিটি এনাম বিকল্পের জন্য নিজের নামটি নির্ধারণ করার উপায়টি নিজেই অনুসন্ধান করতে (বা লোয়ারকেস ব্যবহার করুন)।
টিম্ম

4
: @Timm হ্যাঁ, আমি এই পোস্টে ব্যবহৃত stackoverflow.com/questions/6288660/...
mikebridge

@ মাইকব্রিজ ধন্যবাদ আমি দেখতে পেলাম যে এনাম এন্ট্রি প্রতি এনাম মেম্বার (মান = "অপরিজ্ঞাত")] জেএসওএন.নেটের সাথেও দুর্দান্ত কাজ করে (যদিও মাইক্রোসফ্টের জেএসওন ডিসিরিয়ালার দ্বারা অসমর্থিত)
টিম

40

অন্যান্য উত্তরগুলি এএসপি.নেটের পক্ষে কাজ করে, তবে আপনি যদি যাসনকনভার্টকে কোনও প্রসঙ্গে কল করার জন্য সাধারণত এই সেটিংসটি সেট করতে চান তবে আপনি করতে পারেন:

JsonConvert.DefaultSettings = (() =>
{
    var settings = new JsonSerializerSettings();
    settings.Converters.Add(new StringEnumConverter {CamelCaseText = true});
    return settings;
});

( Http://james.newtonking.com/archive/2013/05/08/json-net-5-0-release-5-defaultsettings- and- এক্সটেনশন- ডেটা দেখুন )


4
আমি কি খুঁজছিলাম! এমনকি আরও ছোট:JsonConvert.DefaultSettings = () => new JsonSerializerSettings { Converters = { new StringEnumConverter { CamelCaseText = true } } };
কাপ

তুমি আমাকে বাঁচালে! ধন্যবাদ ভাই! gist.github.com/regisdiogo/27f62ef83a804668eb0d9d0f63989e3e
ক্রথোমসন

18

আপনার Global.asax.cs এ যুক্ত করুন

HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add
                (new Newtonsoft.Json.Converters.StringEnumConverter());

এই সমাধানটি ওয়েবএপিআই সিরিয়ালের জন্য পুরোপুরি কাজ করে বলে মনে হচ্ছে। ধন্যবাদ!
চার্লি

5

এএসপি.নেট কোর 2 এর জন্য নিম্নলিখিতটি করুন:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
                .AddJsonOptions(options =>
                {
                    options.SerializerSettings.Converters.Add(new StringEnumConverter());
                });

        ...

দয়া করে নোট করুন এটি নয় services.AddJsonOptions(...), এটি অবশ্যই এমভিসিতে ট্যাগ করা উচিত কারণ আপনি এমভিসির জন্য সেটিংস তৈরি করছেন।


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