नियमित deserialization .net हमेशा नई वस्तुओं का ग्राफ बनाता है। यह हमेशा सुविधाजनक नहीं होता है।
- उदाहरण के लिए, यदि ऑब्जेक्ट में गैर-क्रमिक डेटा, खुले हैंडल और बहुत कुछ हैं।
- वे वस्तुएँ जो क्रमबद्धता में नहीं आती हैं, उनमें वस्तुओं को पढ़ने के लिए लिंक हो सकते हैं, आदि यह विशेष रूप से सच है यदि आपकी असेंबली किसी और द्वारा उपयोग की जाती है, और आप ऐसे सभी मामलों को सही डिज़ाइन के साथ हल नहीं कर सकते हैं।
- और अंत में, एक छोटे पूर्ववत के लिए, पूरी तरह से पुन: बनाने वाली वस्तुएं तर्कहीन हैं।
खोज ने तैयार जवाब नहीं दिया। प्रोटोबुफ़ और अन्य तृतीय-पक्ष धारावाहिकों का उपयोग करने के लिए सबसे आसान समाधान नहीं हैं, लेकिन यह हमेशा लागू नहीं होता है।
एक पूरे के रूप में कार्य मुश्किल नहीं है, और मेरा समाधान कुछ बकाया नहीं है, लेकिन दूसरी तरफ, उन लोगों के लिए जो पहली बार एक समान समस्या का सामना कर रहे हैं, यह आसान होगा।
क्रमांकन हमेशा की तरह किया जाता है। निम्नलिखित 2 कक्षाएं deserialization की समस्या को हल करेंगी।
[Serializable] public class RealObjectHelper : IObjectReference, ISerializable { Object m_realObject; virtual object getObject(ObjectId id) {
Deserializing करते समय, आपको Binder स्थापित करने की आवश्यकता होती है, जो आपके मौजूदा ऑब्जेक्ट में deserialization के लिए एक आवरण बनाएगा।
BinaryFormatter bf = new BinaryFormatter(null, context); bf.Binder = new RealObjectBinder(YourType.Assembly.FullName, YourType.FullName); bf.Deserialize(memStream);