2012-06-15 10 views
9

ठीक है - मैं अब कुछ घंटों के लिए इसके खिलाफ अपना सिर मार रहा हूं। मदद के लिए पूछने का समय।न्यूटॉन्सॉफ्ट जेसन सीरिएलाइज़र खाली ऑब्जेक्ट

मैंने अभी अपनी वेब एप्लिकेशन प्रोजेक्ट को एएसपी.नेट एमवीसी 4 आरसी, और नई वेबएपी में अपग्रेड किया है। मेरी वेब एपीआई विधि अब ईएमपीटीई जेसन "{}" लौट रही है - भले ही मेरी ऑब्जेक्ट पूरी तरह से आबादी हो।

मैंने सीरिएलाइज़र को अपने मीडियाटाइपफॉर्मेटर के साथ प्रतिस्थापित किया है जो न्यूटॉन्सॉफ्ट जेसन सीरिएलाइज़र को भी कॉल करता है, इसलिए मैं चीजों को काम कर देख सकता हूं और देख सकता हूं। जो मैं देखता हूं वह एक वस्तु है जो धारावाहिक में जा रही है, और "{}" के रूप में बाहर आ रही है।

यह अपग्रेड करने से पहले काम करने के लिए उपयोग किया जाता है।

यह मेरा वस्तु

[Serializable] 
public class Parameters 
{ 
    public string ApplicantName { get; set; } 
} 

है और मैं सिर्फ बोल रहा हूँ:

var result = JsonConvert.SerializeObject(new Parameters(){ Name = "test" }); 

मैं वापस पाने के

"{}" 

क्या चल रहा ??

[संपादित करें]

किसी और ये समस्या हो रही ... Newtonsoft स्रोत कोड के माध्यम से चलाने के बाद, मैं हम हाल ही में एक परिवर्तन से ठीक उसी समस्या हो रही है देख सकते हैं।

http://json.codeplex.com/discussions/357850

उत्तर

5

ठीक है - वहाँ कई परिवर्तन, जो परिणाम Json उत्पादन के लिए कुछ बहुत व्यापक बदलाव है किया गया है। इन परिवर्तनों में यह भी शामिल है कि कस्टम टाइपकॉन्टर कैसे लागू होते हैं।

मैं एक बुनियादी समाधानकर्ता जो (हमारे लिए कम से कम) Newtonsoft serializer अधिक एक बुनियादी Serializable वस्तु serializer की तरह व्यवहार करने का कारण बनता लिखा है - यानी सभी गुण को धारावाहिक, और does not उपयोग कस्टम TypeConverters ...

/// <summary> 
/// A resolver that will serialize all properties, and ignore custom TypeConverter attributes. 
/// </summary> 
public class SerializableContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver 
{ 
    protected override IList<Newtonsoft.Json.Serialization.JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) 
    { 
     var properties = base.CreateProperties(type, memberSerialization); 

     foreach (var p in properties) 
      p.Ignored = false; 

     return properties; 
    } 

    protected override Newtonsoft.Json.Serialization.JsonContract CreateContract(Type objectType) 
    { 
     var contract = base.CreateContract(objectType); 

     if (contract is Newtonsoft.Json.Serialization.JsonStringContract) 
      return CreateObjectContract(objectType); 
     return contract; 
    } 
} 

* पंजीकरण * अपने MvcApplication "Application_Start" में ...

GlobalConfiguration.Configuration.Formatters 
    .JsonFormatter.SerializerSettings.ContractResolver = 
     new SerializableContractResolver() 
     { 
      IgnoreSerializableAttribute = true 
     }; 
+0

धन्यवाद, इस सवाल का जवाब मुझे JSON.NET serializer के अपने मुद्दे serializing सार्वजनिक नहीं वैकल्पिक हल में मदद की स्ट्रिंग गुण जो खाली स्ट्रिंग मान होते हैं ..... मुझे उन्हें परिणामी JSON में शामिल करने की आवश्यकता होती है क्योंकि जावास्क्रिप्ट गुणों की मौजूदगी की अपेक्षा कर रहा है –

+0

मुझे इसके साथ क्या करना चाहिए? पंजीकरण विवरण के साथ –

+1

पोस्ट अपडेट किया गया। – Adam

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