2010-12-02 10 views
7

की एक सरणी देता है मेरे पास उप वर्गों के साथ एक कस्टम सार आधार श्रेणी है जिसे मैंने ISERializable के साथ serializable/deseriablizeable बनाया है। जब मैं इस वर्ग के उप-वर्गों के एकल उदाहरणों के क्रमिकरण/deserialization करते हैं, तो सब कुछ ठीक काम करता है। हालांकि, जब मैं उनमें से एक सरणी करता हूं तो मैं हमेशा deserialization पर nulls की एक सरणी के साथ खत्म होता है। सीरियलाइजेशन बाइनरीफॉर्मेटर के साथ किया जाता है।किसी सरणी का Deserialization हमेशा nulls

आइटम एक में शामिल हैं:

public ObservableCollection<Trade> Trades { get; private set; } 

क्रमबद्धता पर इस SerializationInfo पैरामीटर पर GetObjectData में किया जाता है:

Trade[] trades = (Trade[])Trades.ToArray<Trade>(); 
      info.AddValue("trades", trades); 

और अक्रमांकन इस पर पर भी क्रमबद्धता निर्माता में किया जाता है SerializationInfo पैरामीटर:

Trade[] trades = (Trade[])info.GetValue("trades", typeof(Trade[])); 

      foreach (Trade t in trades) 
      { 
       Trades.Add(t); 
      } 

देस erialization हमेशा मुझे nulls की एक सरणी देता है और जैसा कि मैंने पहले उल्लेख किया है, एक आइटम serializes और इस कोड के साथ ठीक deseriaizes:

क्रमबद्धता (GetObjectData विधि):

info.AddValue("trade", Trades.First<Trade>()); 

Deserialization (क्रमबद्धता निर्माता):

Trade t = (Trade)info.GetValue("trade", typeof(Trade)); 
      Trades.Add(t); 

क्या यह एक आम समस्या है? मुझे कम से कम किसी और के लिए दौड़ने की कोई घटना नहीं मिलती है। उम्मीद है कि एक समाधान है :) और अगर मुझे आपको अधिक जानकारी/कोड प्रदान करने की ज़रूरत है तो बस मुझे बताएं।

धन्यवाद!

+0

हाय, जानकारी चर क्या है? क्रमबद्धता का प्रारूप क्या है? एक्सएमएल या बाइनरी? –

+1

यह SerializationInfo है जिसे मैं GetObjectData और Serialization-constructor में उपयोग करता हूं, क्षमा करें, उसमें उल्लेख किया जाना चाहिए था। – vesz

+0

http://stackoverflow.com/questions/126155/c-array-xml-serialization कोई मदद? – Polity

उत्तर

9

ऐरे पहले deserializes। तब सभी आंतरिक deserialization किया जाता है। तो जब आप वस्तुओं तक पहुंचने का प्रयास करते हैं, तो वे शून्य होते हैं।

और [OnDeserialized] का उपयोग करने का विचार कुछ अन्य तरीकों पर विशेषता है, जो अन्य सभी प्रोपरीज का निर्माण करता है। और यहां उदाहरण है:

[Serializable] 
public class TestClass : ISerializable 
{ 
    private Trade[] _innerList; 
    public ObservableCollection<Trade> List { get; set; } 

    public TestClass() 
    { } 

    [OnDeserialized] 
    private void SetValuesOnDeserialized(StreamingContext context) 
    { 
     this.List = new ObservableCollection<Trade>(_innerList); 
     this._innerList = null; 
    } 

    protected TestClass(SerializationInfo info, StreamingContext context) 
    { 
     var value = info.GetValue("inner", typeof(Trade[])); 
     this._innerList = (Trade[])value; 
    } 

    public void GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     info.AddValue("inner", this.List.ToArray()); 
    } 
} 
+0

मैं कोशिश करूँगा और इसे थोड़ा और देख सकता हूं और कुछ और कोड मेरे प्रश्न में। मैं वास्तव में एक वर्ग पर क्रमबद्धता कर रहा हूं जिसमें धारावाहिक वस्तुओं की इस सरणी शामिल है। एक विकल्प है SerializationInfo में विभिन्न नामों के साथ संपूर्ण सरणी को क्रमबद्ध करना। "व्यापार 1" और इसी तरह। – vesz

+0

अद्यतन उत्तर, अब यह मदद करनी चाहिए) –

+0

अब इसे जांचना, मुझे एक सेकंड दें। तुम बहुत तेज़ हो :) मैं भी अपना नया टेस्ट प्रोजेक्ट पूरा नहीं कर पाया: डी – vesz

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