2010-11-28 11 views
5

शामिल हैं, मैं वर्तमान में बड़ी ऑब्जेक्ट संरचनाओं को सहेजने पर काम कर रहा हूं जिसमें उस एप्लिकेशन में 'प्रोजेक्ट' के लिए आवश्यक सभी डेटा शामिल हैं, जिस पर मैं काम कर रहा हूं। डेटा चित्र, फ्लड दस्तावेज़ों के साथ-साथ अधिक बुनियादी डेटाटाइप जैसी चीजें हैं।एक आईएसरियलज़ेबल ऑब्जेक्ट को सीरियलाइज करना, जिसमें अन्य आईएसरियलज़ेबल ऑब्जेक्ट्स

अब, मेरा वर्तमान दृष्टिकोण ऑब्जेक्टिज़ेबल को उन सभी वर्गों पर लागू कर रहा है जो उस वस्तु के भीतर निहित हैं जिन्हें मुझे बचाने की आवश्यकता है। हालांकि, जब:

public class Profile : ISerializable 
{ 
    public ObservableCollection<Trade> Trades { get; set; } 

    public Profile() {} 

    public Profile(SerializationInfo info, StreamingContext context) 
      : this() 
     {  
      foreach (SerializationEntry entry in info) 
      { 
       if (entry.Name.StartsWith("trade")) 
       { 
        Type t = entry.ObjectType; 
        Trades.Add(entry.Value as Trade); 
       } 
      } 
     } 

    public void GetObjectData(SerializationInfo info, StreamingContext context) 
     { 
      int i = 0; 
      foreach (Trade t in Trades) 
      { 
       info.AddValue("trade" + i, t, t.GetType()); 
       i++; 
      } 
     } 
} 

यह एक समस्या है। व्यापार सूची जो मेरी सूची को पॉप्युलेट करती है वह भी आईएसरियलज़ेबल लागू करती है। तो मुझे आश्चर्य है कि क्या यह एक अच्छा दृष्टिकोण है? क्या यह भी काम करता है? जो कोड मैंने अभी तक लिखा है वह काम नहीं करता है, और मैं अभी भी कंकों को काम करने की कोशिश कर रहा हूं।

अधिक विशेष रूप से जानकारी होगी। AddValue ("व्यापार" + i, t, t.GetType()); ट्रेड-क्लास 'ISerializable-विधियों का उपयोग करें? या शायद यह इंटरफेस इन प्रकार के वर्गों से निपटने के लिए भी नहीं था।

तो यदि कोई बहुत दयालु होगा, और थोड़ा सा नज़र डालें और शायद मुझे सही दिशा में इंगित करें जब इन चीजों के क्रमिकरण की बात आती है।

धन्यवाद!

उत्तर

2

यह सुनिश्चित नहीं है कि यहां समस्या क्या है (यदि आप व्यापार वर्ग पोस्ट कर सकते हैं और वास्तव में काम नहीं कर रहे हैं, तो विवरण उपयोगी होगा), लेकिन सामान्य रूप से यदि व्यापार वर्ग क्रमबद्ध है, तो आपको बस प्रोफ़ाइल वर्ग में [Serializable] विशेषता जोड़ें और ISerializable लागू करके कस्टम क्रमबद्ध करने की आवश्यकता नहीं है।

आमतौर पर आपको कस्टम सीरियलाइजेशन करने की आवश्यकता होने पर केवल ISERializable को लागू करने की आवश्यकता होती है (उदा। जब आपके डेटा सदस्य क्रमबद्ध नहीं होते हैं)।

संपादित करें: बस एहसास हुआ कि आप एक पर्यवेक्षण चयन का उपयोग कर रहे हैं, इसलिए [Serializable] विशेषता का उपयोग करने की मेरी पिछली टिप्पणी सही नहीं है। ObservableCollection क्रमबद्ध करने के बारे में जानकारी के लिए यहां देखें: http://kentb.blogspot.com/2007/11/serializing-observablecollection.html या आपको ट्रेड [] उदाहरण प्राप्त करने के लिए ObservableCollection.CopyTo() का उपयोग करने में सक्षम होना चाहिए और सीधे इसे SerializationInfo में जोड़ें।

+0

यह एक सामान्य प्रश्न है और कुछ विशिष्ट नहीं है, और यह सिर्फ एक उदाहरण कोड-स्निपेट है। क्षमा करें अगर मैं अस्पष्ट था। प्रश्न: यदि मेरे पास कक्षा है कि मुझे कस्टम क्रमबद्ध करने की आवश्यकता है, और उसके बाद उस वर्ग में ऐसी ऑब्जेक्ट्स हैं जिन्हें कस्टम सीरियलाइजेशन की आवश्यकता होती है, तो मैं GetObjectData-method में उससे कैसे निपटूं? या शायद यह भी एक समस्या नहीं है? आश्चर्य है कि शायद डेटाकंट्रैक्टसेरियलाइज़र जैसे कुछ और उस तरह की चीजें जरूरी हैं या नहीं। धन्यवाद – vesz

+0

सामान्य रूप से, प्रत्येक वर्ग को अपने स्वयं के क्रमिकरण (कस्टम या डिफ़ॉल्ट) के प्रभारी होना चाहिए और कक्षाएं जिसमें धारावाहिक कक्षाएं हों, उन्हें यह जानने की आवश्यकता नहीं है कि यह कैसे किया जाता है, यह encapsulated है। पर्यवेक्षण चयन को क्रमबद्ध करने के कारण आप परेशानी में पड़ रहे हैं, और यहां इसके बारे में अधिक जानकारी है: http://kentb.blogspot.com/2007/11/serializing-observablecollection.html। यदि आपको केवल प्रकारों को क्रमबद्ध करने की आवश्यकता है, तो आप एक व्यापार प्राप्त करने के लिए ObservableCollection.CopyTo() का उपयोग करने में सक्षम होना चाहिए [] और इसे सीधे SerializationInfo में जोड़ें। – SpeksETC

+0

धन्यवाद, यह बहुत उपयोगी है। CopyTo(), शायद पर्याप्त होना चाहिए। मुझे नहीं पता था कि यह संभव था। मैंने सोचा कि मुझे व्यक्तिगत रूप से सूची में प्रत्येक ऑब्जेक्ट को क्रमबद्ध करना होगा यदि वे मूल प्रकारों के अलावा कुछ भी थे। – vesz

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

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