2011-09-15 19 views
75

पर स्ट्रिंगएनम कनवर्टर को लागू करने के लिए वैश्विक रूप से जेसन.Net को कैसे बताना है, मैं उनके स्ट्रिंग प्रतिनिधित्व और जेसननेट के साथ इसके विपरीत गणना को विलुप्त करना चाहता हूं।सभी एनम्स

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

हालांकि, अपने प्रयोग के मामले में, यह बहुत अधिक सुविधाजनक json.net कॉन्फ़िगर करने के लिए किया जाएगा: एक ही रास्ता मैं यह पता लगाने सकता है लागू करने के लिए अपने StringEnumConverter इस तरह के प्रश्न में गुण टिप्पणी करने की है रूपरेखा बताने के लिए वैश्विक रूप से इस तरह की सभी गणनाओं को अतिरिक्त टिप्पणियों की आवश्यकता के बिना StringEnumConverter का उपयोग करके क्रमबद्ध किया जाता है।

ऐसा करने का कोई तरीका है, उदा। कस्टम JsonSerializerSettings की मदद से?

उत्तर

106

JsonSerializerSettings कन्वर्टर्स संग्रह में StringEnumConverter जोड़ें।

प्रलेखन: Serialize with JsonConverters


आप serializer camelCasing उपयोग करना चाहते हैं, तो आप इस रूप में अच्छी तरह से सेट कर सकते हैं:

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

यह someValue को SomeValue को क्रमानुसार होगा।

+0

मैं 'GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings'but काम नहीं किया के तहत मेरे global.asax.cs इस सेटिंग को चालू करने की कोशिश की। कोई विचार क्यों हो सकता है? – amhed

+0

क्या फ़ील्ड नाम को कम करने का कोई तरीका है? CamelCaseText झंडा वर्ग में हार्ड-कोडेड है और मैं एक अलग आवरण रणनीति का उपयोग करने के लिए एक रास्ता नहीं दिख रहा। – mikebridge

+0

@ माइकब्रिज क्या आपको इसका समाधान मिला है? इसके अलावा प्रत्येक enum विकल्प के लिए नाम सेट करने का तरीका ढूंढना (या लोअरकेस का उपयोग करें)। – Timm

18

अपने Global.asax.cs में

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

यह समाधान वेबएपीआई क्रमबद्धता के लिए पूरी तरह से काम करता प्रतीत होता है। धन्यवाद! – chuck

34

अन्य उत्तर ASP.NET के लिए काम करते हैं जोड़ने के लिए, लेकिन आप किसी भी संदर्भ में JsonConvert बुला आप कर सकते हैं के लिए आम तौर पर इन सेटिंग्स सेट करना चाहते हैं:

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-extension-data देखें)

+1

मैं क्या देख रहा था! यहां तक ​​कि छोटा: 'JsonConvert.DefaultSettings =() => नया JsonSerializerSettings { कन्वर्टर्स = {नया स्ट्रिंगएनम कनवर्टर {CamelCaseText = true}} }; ' –

0

लिए ASP.NET कोर 2 निम्न कार्य करें:

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

     ... 

कृपया ध्यान दें यह services.AddJsonOptions(...) नहीं है, यह MVC पर चिह्नित किया जाना चाहिए, क्योंकि आप MVC के लिए सेटिंग्स बना रहे हैं।

संबंधित मुद्दे