2013-04-15 2 views
6

वापसी करता है क्यों निम्नलिखित कोड वापसी "[]" जब यह वापस आ जाएगी "{" id ": 1999," शीर्षक ":" hithere "}क्यों C# JavaScriptSerializer.Serialize खाली वर्गाकार ब्रेकेट

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    StringBuilder sbJsonResults = new StringBuilder(); 
    var result = serializer.Serialize(new dg(1999, "hithere")); 

    context.Response.Clear(); 
    context.Response.ContentType = "application/json; charset=utf-8"; 
    context.Response.Cache.SetExpires(DateTime.MinValue); 
    context.Response.Write(result); 

।। सफलतापूर्वक जवाब दिया - - यह IEnumerable कि मेरे संकट का स्रोत था था इसे हल करने के लिए, डीजी नहीं रह गया है IEnumerable प्रदान करता है और सभी

public class dg : ScheduleObserver, ILibrary, IEnumerable { 
     public int id; 
     public string title; 
     private List<d> dList; 
     ...many getters and setters and some logic functions... 
    } 

    public abstract class ScheduleObserver{ 
     public abstract void update(); 
    } 

    public interface ILibrary { 
     List<PD> getPDs(); 
     void setPDs(List<PD> newPDs); 
     int getCurrentIndex(); 
     void addPD(PD pD); 
     PD getPD(int index); 
    } 

बहुत धन्यवाद

धन्यवाद: पी एस महानिदेशक वर्ग इस तरह दिखता है foreach (डीजी ...) लूप को वापस (int i = 0 ...) loops में परिवर्तित कर दिया गया है।

बहुत धन्यवाद, बहुत बहुत धन्यवाद! जेम्स को यह खाली क्यों मिला, पारव को स्क्वायर ब्रैकेट क्यों मिला। दोनों जवाब के रूप में चिह्नित करेंगे लेकिन केवल एक को चिह्नित कर सकते हैं।

+0

'dg' =' [serializable] '? –

+0

क्या डीजी में एक कन्स्ट्रक्टर है जो आपके उदाहरण में अधिभार से मेल खाता है और क्या वह अधिभार उचित रूप से संबंधित गुणों को मान निर्दिष्ट करता है? – Dimitri

+0

@ ब्रैड - मुझे डीजी – user2282496

उत्तर

4

source को देखते हुए समस्या चीजों की एक जोड़ी का एक संयोजन प्रतीत होता।

के रूप में पहले से ही @Parv कारण बताया गया है क्योंकि अपनी कक्षा पुनरावृति वस्तु को IEnumerable तो serializer प्रयास को लागू करता है और उसके बाद प्रत्येक आइटम स्वतंत्र रूप से क्रमानुसार [] है मिलता है। आपका वर्तमान डिज़ाइन काम नहीं करेगा क्योंकि यह IEnumerable को लागू करने वाले प्रकारों के लिए सार्वजनिक गुणों को क्रमबद्ध करने के लिए डिज़ाइन नहीं किया गया है।

अन्य मुद्दे, जैसा कि मैंने एक टिप्पणी में उल्लेख किया है, आपकी कक्षा में कोई सार्वजनिक गुण नहीं दिखता है, इस समय आपके पास क्या है चर। सीरियलाइज़र को काम करने के लिए आपको संपत्ति सेटटर/गेटर्स की आवश्यकता है i.e.

public class dg 
{ 
    public int id { get; set; } 
    public string title { get; set; } 
    ... 
} 
3

समस्या हो सकती है कि क्योंकि dg वर्ग IEnumerable विरासत, JavaScriptSerializer एक Array और इसलिए वर्ग कोष्ठक रूप में यह इलाज किया जाता है।

करने का प्रयास करें

var result = serializer.Serialize(
    new dg(1999, "hithere").Select(d => new{ id = d.id, title = d.title })); 
+0

@ जेम्स आईन्यूमेरेबल टाइप डीजी –

+0

के लिए एक कार्यान्वित इंटरफेस है बहुत अच्छा ... और मैं केवल फोरच लूप के लिए ienumerable का उपयोग कर रहा था – user2282496

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