2011-08-15 10 views
61

मैं System.Web.Helpers.Json का उपयोग कर रहा हूं ताकि कुछ JSON को dynamic में नेट 4 में deserialize किया जा सके। । निम्न पंक्ति इस त्रुटि के साथ विफल: TypeInitializationException: Attempt by method 'System.Web.Helpers.Json..cctor()' to access method 'System.Web.Helpers.Json.CreateSerializer()' failed.विधि 'System.Web.Helpers.Json..cctor()' विधि का उपयोग करने के लिए विधि 'System.Web.Helpers.Json.CreateSerializer()' असफल

var json = Json.Decode(response); 

response लंबा लेकिन मान्य JSON है। यहां मामला क्या हो सकता है? मैंने LINQPad को एक छोटी हस्तशिल्प जेएसओएन के साथ कोशिश की है और यह काम किया है। क्या यह किसी प्रकार का कॉन्फ़िगरेशन समस्या है?

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

यहां वास्तविक नमूना JSON है। ऐसा लगता है कि सामग्री काफी अप्रासंगिक है। जब यह एक ब्रांड नए कंसोल एप्लिकेशन या LINQPad में चलाया जाता है, तो यह अपेक्षा के अनुसार काम करता है। लेकिन यदि आप एक ब्रांड को नए विंडोज फॉर्म एप्लिकेशन से एक ही कोड चलाने का प्रयास करते हैं, तो यह उपरोक्त त्रुटि के साथ बारफ करता है।

var json = Json.Decode("{\"r\":{\"0\":{\"id\":\"2\"},\"1\":{\"id\":\"33\"}}}"); 

[EDIT2]

वास्तव में, यह पता चला है इस परियोजना के प्रकार के साथ कोई संबंध नहीं है। अगर परियोजना को डीबग किया जा रहा है तो अपवाद फेंक दिया जाता है। यदि यह आसानी से चलाया जाता है, तो अपवाद नहीं होता है। अजीब, आह?

+1

कृपया जेएसओएन और कोड जो आप इसका उपयोग कर रहे हैं उसे दिखाएं। – casperOne

+1

मैंने नमूना JSON और पुन: उत्पन्न करने के तरीके पर एक अतिरिक्त विवरण शामिल करने के लिए प्रश्न संपादित किया है। – wpfwannabe

+1

क्या 'TypeInitializationException' के लिए कोई आंतरिक अपवाद है? यह आपको असफल होने पर अधिक जानकारी दे सकता है। – akton

उत्तर

137

मैं इस प्रश्न के बारे में भूल गया और मुझे इस दौरान मेरा जवाब मिला। मुझे लगता है कि यह माइक्रोसॉफ्ट की कनेक्ट साइट पर कहीं था लेकिन मुझे यकीन नहीं है। तो चलिए इसे अभी साझा करें।

असल में, इस समस्या को हल करने के लिए आपको यह सुनिश्चित करना होगा कि "विजुअल स्टूडियो होस्टिंग प्रक्रिया सक्षम करें" को डीबग के तहत आपकी प्रोजेक्ट की सेटिंग्स में अनचेक किया गया है। मुझे यकीन नहीं है कि यह क्यों हो रहा है लेकिन यह निश्चित रूप से इसे "ठीक करने" का एक तरीका है। एक बार जब मुझे पता चला तो मैंने जवाबों की खोज बंद कर दी। यह मेरे लिए काफी अच्छा था।

Settings/Debug

+0

इसे उत्तर के रूप में चिह्नित करने और बक्षीस प्राप्त करने से बहुत अच्छा :) –

+2

मुझे यकीन नहीं है कि यह उचित है। क्या यह केवल मेरी कॉल है? मुझे लगता है कि जो भी उपहार प्रदान करता है वह इस हकदार है (या मैं गलत हूं?)। – wpfwannabe

+0

@wpfwannabe कृपया, अपने उत्तर टिप्पणी में जोड़ें कि इस विकल्प को किसी भी परियोजना के लिए अनचेक किया जाना चाहिए जिसने मूल परियोजना को "जेसन.डेकोड" कोड के साथ संदर्भित किया है। – Seekeer

7

यह भी अगर आप एक आंशिक विश्वास में चल रहे हैं हो सकता है। संभावित कारणों से exception description here देखें।

मैं अगर यह आप के लिए लागू होगी के बाद से आप एक वेब संदर्भ में नहीं चल रहे हैं पता नहीं है, लेकिन यह क्या है कि लिंक का वर्णन करता है:

This exception is thrown in situations such as the following:

  • A private, protected, or internal method that would not be accessible from normal compiled code is accessed from partially trusted code by using reflection.

  • A security-critical method is accessed from transparent code.

  • The access level of a method in a class library has changed, and one or more assemblies that reference the library have not been recompiled.

3

इनबिल्ट json कक्षा में समस्या है।

आप वैकल्पिक रास्ते में इस लक्ष्य को हासिल करना चाहते हैं तो नीचे दिए गए कोड का उपयोग करें:

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
serializer.RegisterConverters(new DynamicJavaScriptConverter[] { new DynamicJavaScriptConverter() }); 
var result = WrapObject(serializer.DeserializeObject(value)); // here you will have result. 

private object WrapObject(object value) 
    { 
     IDictionary<string, object> values = value as IDictionary<string, object>; 
     if (values != null) 
     { 
      return new DynamicJsonObject(values); 
     } 
     object[] arrayValues = value as object[]; 
     if (arrayValues != null) 
     { 
      return new DynamicJsonArray(arrayValues); 
     } 
     return value; 
    } 
+0

पर काम नहीं किया है। नेट फ्रेमवर्क में 'गतिशील जावास्क्रिप्ट कनवर्टर' है? कहा पे? – dumbledad

1
इसके अलावा रोलाण्ड के जवाब देने के लिए

: कुछ विधानसभा सूचीबद्ध AssemblyInfo.cs फ़ाइल में तय किया जा सकता है बेमेल।

[assembly: AllowPartiallyTrustedCallers] 

यह मेरे (एक सार्वजनिक वर्ग पर) सार्वजनिक संपत्ति का उपयोग करने की है कि मैं एक और विधानसभा कि था से स्थापित करने के लिए कोशिश कर रहा था की अनुमति दी निकाला जा रहा है गतिशील रूप से इस विधानसभा लोड:

मेरी AssemblyInfo में हमलावर लाइन यह था ।

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