如何将字段序列化为磁盘,但不进行深度克隆?

时间:2009-10-01 17:18:57

标签: c# serialization

假设我有一个包含以下代码的应用程序:

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

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

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

我在两种不同的场景中使用序列化:

  1. 将我的对象保存到磁盘,
  2. 进行深度克隆。
  3. 当我想将对象序列化到磁盘时,我希望孩子们也能被序列化。

    然而,当我使用序列化来执行深度克隆时,我不希望孩子们这样做 序列化。我循环遍历孩子并调用每个孩子的Clone方法,然后将其添加到父级。

    我想知道是否可以控制序列化,这样我就可以告诉Serializer是否序列化特定字段。

    如果不能直接使用,我使用二进制序列化进行深度克隆,使用XMLSerialization来保存对象。也许这可能会有所帮助。

2 个答案:

答案 0 :(得分: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) - 所以它仍应序列化它们。

答案 1 :(得分:2)

您可以让您的类实现IXmlSerializable以在您使用XmlSerializer时提供对序列化的完全控制,并在其他情况下ISerializable来控制序列化。