2015-09-17 78 views
1

我正在用C#編寫一個程序,它將數據分配給一個類,然後將該類指定給樹視圖節點的標記值。序列化樹視圖時丟失數據

我能夠使用我在這裏找到的答案將我的樹視圖序列化爲文件:Saving content of a treeview to a file and load it later

但是,當解序列化文件時,所有節點的標籤都會丟失,或者更有可能的是,它們甚至沒有被序列化。

使用此方法序列化時,是否可以保留節點的標記值?如果是這樣,怎麼樣?

回答

0

要被BinaryFormatter成功系列化,您Tag對象必須被標記爲[Serializable],這表明它可以成功序列化,並通過序列化的公共和私人領域反序列化。如果是如此顯着,那麼它序列化爲一個TreeNode的一部分,是由reference source圖所示:

[TypeConverterAttribute(typeof(TreeNodeConverter)), Serializable, 
DefaultProperty("Text"),  
SuppressMessage("Microsoft.Usage", "CA2240:ImplementISerializableCorrectly")] 
public class TreeNode : MarshalByRefObject, ICloneable, ISerializable { 

    object userData; 

    protected virtual void Serialize(SerializationInfo si, StreamingContext context) { 

     // SNIP storage of irrelevant fields. 

     if (userData != null && userData.GetType().IsSerializable) { 
      si.AddValue("UserData", userData, userData.GetType()); 
     } 
    } 

    public object Tag { 
     get { 
      return userData; 
     } 
     set { 
      userData = value; 
     } 
    } 
} 

需要注意的是,如果你的Tag對象序列化,它會悄無聲息跳過;不會拋出異常。

+0

正是我所需要的。非常感謝,我希望這個問題能達到這裏預期的標準。爲了澄清,我所需要做的就是將我分配給標記的類標記爲[Serializable()],並將其繼承到Tag。 – PoTheCoder