2009-10-01 68 views
2

假設我有下面的代碼的應用程序:如何將字段序列化爲磁盤,但未進行深度克隆?

public class Node 
{ 
    public Node Clone() {//implementation} 

    public List<Node> Children{get;set;} 

    //Many properties 
    public string Content { get; set; } 
    // ... etc ... 
} 

我用兩種不同的場景序列:

  1. 保存我的對象到磁盤,並
  2. 執行深度克隆。

當我想將對象序列化到磁盤上時,我希望孩子們也被序列化。

但是,當我使用序列化來執行深度克隆時,我不希望孩子被序列化爲 。我將循環查看子節點並調用每個子節點的Clone方法,然後將其添加到父節點。

我想知道是否有可能控制序列化,以便我能夠告訴串行器是否序列化特定字段。

如果不能直接使用,我使用二進制序列化進行深度克隆和XMLSerialization以保存我的對象。也許這可以幫助某種方式。

回答

4

所以,你想深(BinaryFormatter)版本跳過列表?

public List<Node> Children{get;set;} 

[NonSerialized] 
private List<Node> children; 
public List<Node> Children { 
    get {return children;} 
    set {children = value;} 
} 

XmlSerializer不看[NonSerialized] - 它只是着眼於公共成員(Children) - 所以還是應該序列化。

2

當您使用XmlSerializer時,您可以讓您的類實現IXmlSerializable以提供對序列化的完全控制,在其他情況下,您可以使用ISerializable控制序列化。