c# - जेसन के साथ व्यवहार करते समय परिपत्र संदर्भ त्रुटि को ठीक करने के लिए




json asp.net-mvc-3 (2)

यह प्रश्न मेरे मूल पोस्ट का एक हिस्सा है। Extjs GridPanel में डेटा प्राप्त करें

नीचे मेरा नियंत्रक है जो एसक्यूएल डीबी से डेटा पढ़ता है और फिर मैं परिणाम को JSON के रूप में एन्कोड करने का प्रयास कर रहा हूं और डेटा को वापस अपने gridview.js पर भेज देता हूं

public JsonResult writeRecord()
//public string writeRecord()
    {

        Response.Write("Survey Completed!");
        SqlConnection conn = DBTools.GetDBConnection("ApplicationServices2");


        string sqlquery = "SELECT Q1, Q2, Q3, Q4, Improvements, Comments FROM myTable";
        SqlDataAdapter cmd = new SqlDataAdapter(sqlquery, conn);


        DataSet myData = new DataSet();
        cmd.Fill(myData, "myTable");

        conn.Open();
        conn.Close();

        return Json(myData, JsonRequestBehavior.AllowGet);
        //return myData.GetXml();

    } 

यहाँ समस्या है, उपरोक्त कोड के साथ, मुझे gridview.js निष्पादित करते समय कोई ग्रिडव्यू तालिका नहीं मिली है, लेकिन अगर मैं सीधे इस तरह मेरी नियंत्रक की विधि का उपयोग करता हूं

http://localhost:55099/GridView/writeRecord

मुझे यह त्रुटि मिलती है,

एक सर्कुलर संदर्भ का पता लगाया गया, जबकि 'ऑब्जेक्ट' का एक प्रकार 'System.Globalization.CultureInfo' क्रमबद्ध करता है विवरण: वर्तमान वेब अनुरोध के निष्पादन के दौरान एक अनियंत्रित अपवाद उत्पन्न हुआ। कृपया त्रुटि के बारे में अधिक जानकारी के लिए स्टैक ट्रेस की समीक्षा करें और कोड में इसकी उत्पत्ति कहाँ की गई है। अपवाद विवरण: System.InvalidOperationException: एक ऑब्जेक्ट प्रकार 'System.Globalization.CultureInfo' को serializing करते समय एक परिपत्र संदर्भ का पता चला था

क्या कोई मदद कर सकता है ..


ऐसा इसलिए है क्योंकि संस्कृति इन्फोस के अंदर कुछ भी खुद का एक संदर्भ है (इस प्रकार) और JSON को परिवर्तित करने की प्रक्रिया विफल हो जाती है इस स्थिति से बचने के लिए, आपको व्यूमोडेल का उपयोग करना चाहिए (ग्राहक को केवल जानकारी की आवश्यकता है जो वापस लौट आती है)। आप यहां अधिक पढ़ सकते हैं http://blogs.msdn.com/b/dphill/archive/2009/01/31/the-viewmodel-pattern.aspx

आपकी स्थिति में आप अपने डेटा के लिए ViewModels बनाते हैं, अपने डेटा को इन डेटा प्रकारों में कनवर्ट करते हैं और उन्हें वापस JSON में कनवर्ट करते हैं। मॉडल से देखें मॉोडेल में परिवर्तित करने के उद्देश्य के लिए ऑटोमैपर http://automapper.codeplex.com/ या कुछ समान टूल का उपयोग करने पर विचार करें।


मैं JSON serializing और deserializing के लिए निम्न उपकरण का उपयोग करता हूँ:

http://james.newtonking.com/pages/json-net.aspx

इसका उपयोग करना बहुत आसान और बहुत हल्के है

Serializing करते समय हम इस विकल्प का उपयोग करते हैं:

JsonConvert.SerializeObject(myObject, Formatting.Indented, 
                            new JsonSerializerSettings { 
                                   ReferenceLoopHandling = ReferenceLoopHandling.Ignore 
                            })

यह परिपत्र संदर्भों की उपेक्षा करता है।

इसके अलावा न्यूटनिंग से json.net बहुत तेज है

अन्य विकल्पों में डीटीओ का उपयोग करना और उन्हें गोताखोर द्वारा उल्लिखित ऑटोमैपर के माध्यम से नक्शा करना है।

संपादित करें: मुझे संदेह है कि आपकी दुकान गलत है:

var store = Ext.create('Ext.data.JsonStore', {      
        storeId: 'myData',
        reader: new Ext.data.JsonReader({
            root: 'myTable',
            fields: [{ name: 'Q1', type: 'int' },
                     { name: 'Q2', type: 'int' },
                     { name: 'Q3', type: 'int' },
                     { name: 'Q4', type: 'int' },
                     { name: 'Q5', type: 'int' },
                     { name: 'Improvements', type: 'string' },
                     { name: 'Comments', type: 'string'}]
        }),

        proxy: {
             type: 'json',
            url: 'GridView/writeRecord'
        }    
});  




circular-reference