2012-08-17 18 views
6

में शून्य फ़ील्ड शामिल नहीं कर सकते हैं मैं एमवीसी 4 वेबएपीआई (आरटीएम - बस वीएस2012 आरटीएम स्थापित किया गया था लेकिन आरसी में कल यह समस्या थी) के साथ जेएसओएन के रूप में वस्तुओं को क्रमबद्ध करने की कोशिश कर रहा हूं और मैं चाहूंगा जेएसओएन आउटपुट में सभी नल प्रस्तुत किए जाएंगे। इस तरह:एमवीसी 4 वेबएपीआई में जेएसओएन

[{"Id": 1, "PropertyThatMightBeNull": null},{"Id":2, "PropertyThatMightBeNull": null}] 

लेकिन क्या मैं हो रही

[{"Id":1},{"Id":2}] 

मैं इस प्रश्न मिल गया है/है एक WebApi doesnt serialize null fields लेकिन इस सवाल का जवाब या तो मेरे लिए काम नहीं करता है या मैं समझ जहां नाकाम रहने रहा हूँ जवाब देने के लिए।

यहाँ मैं क्या कोशिश की है:

  1. Global.asax.cs के Application_Start में, मैं कहा:

    var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; 
    json.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include; 
    json.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include; 
    

    यह नहीं करता है (लग) की गलती और वास्तव में निष्पादित करने के लिए लगता है मैंने कोशिश की अगली चीज़ को देखने के आधार पर।

  2. एक नियंत्रक विधि (ApiController का एक उपवर्ग में) में, कहा:

    base.Configuration.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include; 
    base.Configuration.Formatters.JsonFormatter.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include; 
    

    मैं कहता हूँ # 1 निष्पादित क्योंकि # 2 में दोनों मूल्यों को पहले से ही स्थापित किए गए पहले उन पंक्तियों के रूप में मैं के माध्यम से कदम रखा भाग गया।

  3. एक हताशा चाल में मैं एक संपत्ति है कि बातिल और अनुपस्थित था को यह attrib जोड़ने की कोशिश की (क्योंकि मैं वास्तव में हर वस्तु के हर संपत्ति को सजाने के लिए नहीं करना चाहते हैं):

    [JsonProperty(DefaultValueHandling = DefaultValueHandling.Include, 
        NullValueHandling = NullValueHandling.Include)] 
    

सभी तीन शून्य गुणों के साथ एक ही JSON उत्पन्न छोड़ दिया।

अतिरिक्त नोट्स:

  • IIS में स्थानीय स्तर पर चल रहा है (भी में निर्मित करने की कोशिश की), विंडोज 7, VS2012 आरटीएम।
  • नियंत्रक विधियों की वापसी सूची - आईनेमेरेबल भी कोशिश की गई
  • ऑब्जेक्ट्स जिन्हें मैं क्रमबद्ध करने की कोशिश कर रहा हूं वो पॉको हैं।

उत्तर

1

मैं अंत में इस http://forums.asp.net/t/1824580.aspx/1?Serializing+to+JSON+Nullable+Date+gets+ommitted+using+Json+NET+and+Web+API+despite+specifying+NullValueHandling में आए जो यह बताता है कि मैं बीटा कि था में एक बग के रूप में अनुभव कर रहा था आरटीएम के लिए तय

हालांकि मैं VS2012 RTM स्थापित किया था, अपने प्रोजेक्ट अभी भी सभी nuget संकुल है कि बीटा के साथ आया था का उपयोग कर रहा था। तो मैं सब कुछ के लिए (nugot?) Nugetted अद्यतन और सब कुछ ठीक है अब (मेरे सवाल से # 1 का उपयोग)। हालांकि मैं आधे दिन जलाए जाने के लिए मूर्ख महसूस कर रहा हूं।

10

यह काम करेगा नहीं:

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; 
json.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Include; 

लेकिन इस करता है:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = new Newtonsoft.Json.JsonSerializerSettings() 
{ 
NullValueHandling = Newtonsoft.Json.NullValueHandling.Include 
}; 
+0

बाहर कर देता है यह काम किया है - या होना चाहिए। मैं खुद को विनम्रता की पूरी खुराक देने के लिए जो कुछ भी खराब कर रहा था उसे पोस्ट करूंगा :) – AndrewFreese

+0

इस उत्तर के लिए आपको धन्यवाद नहीं दे सकता। – Simian

+0

पहला संस्करण भी काम करता है (सीरिएलाइज़र सेटिंग्स का एक नया उदाहरण बनाये बिना), जब तक आप डिफॉल्ट वैल्यू हैंडलिंग और नलवैल्यू दोनों को अपने संबंधित मूल्यों में शामिल करते हैं – Masterfu

0

जब मैंने यह जवाब देखा तो मैं परेशान था क्योंकि मैं पहले से ही ऐसा कर रहा था और फिर भी मेरी समस्या अभी भी मौजूद थी।मेरी समस्या इस तथ्य पर वापस आ गई कि मेरी वस्तु ने एक इंटरफ़ेस को कार्यान्वित किया जिसमें एक नामुमकिन प्रकार शामिल था, इसलिए, मेरे पास एक अनुबंध था जिसमें आप मुझे लागू करना चाहते हैं, आपको इनमें से एक होना है, और एक धारावाहिक कह रहा है कि उनमें से एक शून्य है इसे शामिल न करें। बूम!

2

कुछ अजीब कारणों से न्यूटॉन्सॉफ्ट.जेसन.जेसनफॉर्मेटर प्रोरिएलाइज़र सेटिंग्स के लिए अभिसरणों को अनदेखा करते हैं।

आदेश अपनी सेटिंग काम .SerializerSettings का नया उदाहरण बनाने बनाने के लिए जैसा कि नीचे दिखाया:

config.Formatters.JsonFormatter.SerializerSettings = new Newtonsoft.Json.JsonSerializerSettings 
     { 

      DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Include, 
      NullValueHandling = Newtonsoft.Json.NullValueHandling.Include, 

     }; 
+0

यह भी सीरियलाइज़र सेटिंग्स का एक नया उदाहरण बनाये बिना काम करता है, जब तक आप दोनों सेट करते हैं DefaultValueHandling और NullValue उनके संबंधित मूल्यों को शामिल करना – Masterfu

+0

विकास और स्टेजिंग मशीनों पर हमारे लिए इस समस्या को हल करने के लिए धारावाहिक सेटिंग्स का एक नया उदाहरण स्थापित करना आवश्यक था। यह एक निराशाजनक मुद्दा था क्योंकि हमारी विकास मशीनें संबंधित मानों को स्थापित करके अपेक्षित रूप से काम कर रही थीं (समान रूप से समान .NET, जेसन सीरियलाइज़र संस्करणों के साथ।) –

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