.net - BinaryFormatter deserialize gives SerializationException -
मुझे एक मिल रहा है:
सिस्टम। समय। सेरिअलाइज़ेशन। सेरिअलाइज़ेशन अपवाद: में असमर्थ असेंबली 'myNameSpace, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, सार्वजनिककीटोकन = शून्य
जब मैं किसी प्रोग्राम को किसी अन्य प्रोग्राम में डेटा के साथ इसे सीरियलाइज़ करना चाहते हैं, तो deserialize करने का प्रयास करते हैं।
कुछ googling के बाद मुझे पता चला है कि जाहिरा तौर पर यह केवल एक साझा असेंबली का उपयोग करके किया जा सकता है।
हालांकि, मेरे डेटाबेस इस धारावाहिक वस्तुओं से भरा है, और मुझे उन्हें पाने के लिए एक उपयोगिता कार्यक्रम की आवश्यकता है बाहर। क्या इस व्यवहार को ओवरराइड करने के लिए कोई तरीका है और इसे उसी कक्षा को ठीक करें और इसे deserialize करने के लिए मजबूर करें?
मुझे पहले से ही यह स्निपेट मिला है, लेकिन मुझे नहीं पता कि मुझे कैसे और कहाँ रखा जाना चाहिए / इसका उपयोग करें।
स्थिर कन्स्ट्रक्टर () {AppDomain.CurrentDomain.AssemblyResolve + = नया ResolveEventHandler (CurrentDomain_AssemblyResolve); } स्थिर विधानसभा CurrentDomain_AssemblyResolve (ऑब्जेक्ट प्रेषक, ResolveEventArgs args) {विधानसभा ayResult = null; स्ट्रिंग sShortAssemblyName = args.Name.Split (',') [0]; विधानसभा [] ayAssemblies = AppDomain.CurrentDomain.GetAssemblies (); विदेशी (विधानसभा विधानसभा में विधानसभा विधानसभा) (यदि (एसोसिएट विधानसभा नाम == ayAssembly.FullName.Split (',') [0]) {ayResult = ayAssembly; टूटना; }} लौटने के लिए ayResult; }
आपको मूल प्रकार किसी भी तरह < / Em> ताकि उपयोगिता कार्यक्रम जानता है कि उसे कैसे deserialize करना है।
आसान तरीका सिर्फ डीएलएल जोड़ने के लिए है, जो मूल रूप से उपयोगिता प्रोजेक्ट के संदर्भ में परिभाषित किए गए थे।
आपके द्वारा पोस्ट किया गया कोड आपको उस समान DLL को गतिशील रूप से लोड करने की अनुमति देता है जब deserializer निर्धारित करता है कि उसे प्रकार नहीं मिल सकता है यह एक अधिक कठिन दृष्टिकोण है (लेकिन उस मुश्किल नहीं है), लेकिन दोनों ही मामलों में आपको एक DLL की ज़रूरत होगी जो कि प्रकार को परिभाषित करता है ... इसलिए संभवतः संदर्भ को जोड़कर केवल स्थिर रूप से लिंक करने के लिए आसान है।
यदि आपके प्रकार वर्तमान में एक DLL में नहीं हैं (उदाहरण के लिए यदि वे EXE में हैं), तो मैं सुझाव देता हूं कि आप EXE के वर्गों को एक नए DLL में खींच लें, और संदर्भ करें कि मूल प्रोजेक्ट और दोनों से DLL उपयोग परियोजना।
Comments
Post a Comment