2010-12-06 23 views
5

मेरे पास ऑब्जेक्ट्स का एक सुंदर जटिल वेब है जो मैं एक अविश्वसनीय वातावरण (वेब ​​ब्राउज़र, यूनिटी 3 डी का उपयोग करके) में क्रमबद्ध और deserialize करना चाहता हूं। सादा BinaryFormatter क्रमबद्धता ठीक काम कर रही है, लेकिन "निजी क्षेत्र तक पहुंच" त्रुटियों के साथ deserialization दुर्घटनाग्रस्त हो जाता है। जब मैं स्थानीय रूप से दौड़ रहा हूं तो यह पूरी तरह से काम करता है।अविश्वसनीय deserialization रणनीति

मैं अपने सभी निजी क्षेत्रों को सार्वजनिक करके अपने कोडबेस को चूसने नहीं दूंगा। ऐसा किए बिना अविश्वसनीय वातावरण में काम करने के लिए deserialization पाने का सबसे अच्छा तरीका क्या है? मैं serialization विधियों को बदलने के लिए खुला हूँ, BinaryFormatter शुरू करने के लिए बस सबसे आसान था।

अद्यतन मैं अपने निजी डेटा तक पहुँचने से क्रमबद्धता को रोकने के लिए नहीं करना चाहते, मैं को क्रमबद्धता, इसे सार्वजनिक करने के लिए होने मेरी कोड की कैप्सूलीकरण समझौता किए बिना मेरी निजी डेटा का उपयोग करने की अनुमति चाहते हैं।

धन्यवाद।

+0

क्या यह एक एएसपीनेट एप्लीकेशन है? – TalentTuner

+0

@ सौरभ, नहीं। यह unity3d है, एक ब्राउज़र प्लगइन जो .NET चलाता है। – luqui

उत्तर

0

ठीक है, अगर आप निजी क्षेत्र को क्रमबद्धता से एक्सेस करना चाहते हैं, तो आप शायद जेसन सीरियलाइजेशन के एक्सएमएल सीरियलाइजेशन पर जा सकते हैं।

आप निजी फ़ील्ड को उन पर nonSerializaed विशेषताओं को रखकर क्रमबद्ध करने से रोक सकते हैं, लेकिन जब आप डेवलपर्स को अपने फ़ील्ड मान्य मान रखने की अपेक्षा करते हैं तो आप समस्याओं में भाग ले सकते हैं और इस तथ्य को ध्यान में रखते हुए नहीं कि स्थानांतरित होने पर उन फ़ील्ड मान खो जाते हैं एकता प्लगइन के लिए।

+0

('[nonSerialized]' जोड़ना) इसका मतलब यह होगा कि यह वास्तव में कुछ भी क्रमबद्ध नहीं करता - जब तक कि मैं आपको –

+0

नहीं समझता, नहीं, आपको गलत समझा नहीं गया। जैसा कि मैंने उल्लेख किया है, गैर-सीरियलाइज्ड फ़ील्ड में मूल्य गुम हो जाते हैं और उनको परिदृश्यों में कुछ गंभीर ध्यान देने की आवश्यकता होती है जहां निम्न स्तर के कमांड पैटर्न की तरह कुछ उपयोग किया जाता है, या अधिक संभावना परिदृश्य में, या तो जेसन या एक्सएमएल सीरियलाइजेशन पर स्विच होता है। – Anton

2

serializers XmlSerializer और जनता के सदस्यों के खिलाफ JavaScriptSerializer काम पसंद है, इसलिए वे चाहिए (को पार उंगलियों) विश्वास के मामले में स्वीकार्य काम करते हैं। यदि आप बाइनरी चाहते हैं तो आप प्रोटोबफ-नेट भी कोशिश कर सकते हैं - लेकिन मैंने इस परिदृश्य का आक्रामक परीक्षण नहीं किया है (यह सिल्वरलाइट जैसी चीजों में काम करता है, हालांकि, जिसमें काफी पसंद वाला ट्रस्ट मॉडल है)।

यदि आप BinaryFormatter के साथ रहना चाहते हैं, लेकिन यह नहीं चाहते हैं कि यह आपके फ़ील्ड को सीधे छूएं, तो आप ISerializable को कार्यान्वित कर सकते हैं, लेकिन यह सब मैन्युअल रूप से कर रहा है ... दर्दनाक।

1

कोई भी जवाब वास्तव में मेरे प्रश्न का उत्तर नहीं दिया (स्पष्टीकरण के लिए अद्यतन देखें)। मैंने BinaryWriter का उपयोग करके अपना स्वयं का सरल धारावाहिक प्रारूप लिखना समाप्त कर दिया। अंत में मुझे एहसास हुआ कि मैंने अपनी कक्षाओं के लिए ISerializable इंटरफ़ेस मैन्युअल रूप से कार्यान्वित करने के बराबर किया था। मुझे ग्राफ serializatoin कोड मैन्युअल रूप से कार्यान्वित करना पड़ा। हालांकि मुश्किल नहीं है, यह थोड़ा सूक्ष्म है, और यह मेरे लिए पहले से ही किया जा चुका है। इस प्रश्न के साथ भविष्य के लोगों के लिए, यदि कोई बेहतर उत्तर नहीं है, तो मैं ISerialzable मैन्युअल रूप से कार्यान्वित करने की अनुशंसा करता हूं।

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