假设我有一个包含以下代码的应用程序:
public class Node
{
public Node Clone() {//implementation}
public List<Node> Children{get;set;}
//Many properties
public string Content { get; set; }
// ... etc ...
}
我在两种不同的场景中使用序列化:
当我想将对象序列化到磁盘时,我希望孩子们也能被序列化。
然而,当我使用序列化来执行深度克隆时,我不希望孩子们这样做 序列化。我循环遍历孩子并调用每个孩子的Clone方法,然后将其添加到父级。
我想知道是否可以控制序列化,这样我就可以告诉Serializer是否序列化特定字段。
如果不能直接使用,我使用二进制序列化进行深度克隆,使用XMLSerialization来保存对象。也许这可能会有所帮助。
答案 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来控制序列化。