gpt4 book ai didi

c# - 序列化时如何维护对象引用

转载 作者:行者123 更新时间:2023-11-30 16:26:06 24 4
gpt4 key购买 nike

好吧,我不太清楚它是如何工作的,或者它是否可能。我想序列化 Child 类,但我实际上并不想序列化 Parent 对象,当它执行 Child.MyParent 字段时...我只想序列化引用。这可能吗?我该怎么做?

public class Parent
{
public Child New()
{
return new Child(this);
}
}

public class Child
{
public Parent MyParent;

public Child(Parent parent)
{
MyParent = parent;
}
}

编辑:我正在使用 DataContractSerializer,但我不反对在必要时切换到其他东西。

最佳答案

XMLIgnoreAttribute可以应用于您不想序列化的字段。例如,

public class Child
{
[XmlIgnore]
public Parent MyParent;

public Child(Parent parent)
{
MyParent = parent;
}
}

但就序列化对该字段的引用而言,您必须提供更多信息,说明您计划如何持久保存引用指向的对象。您不只是序列化 Parent 成员的原因是什么(在您的情况下)?序列化所有需要的公共(public)成员是很常见的。

如果你只是想使用序列化来克隆,像这样的东西应该可以工作:

private static Parent Clone(Parent parent)
{
Parent parentClone = null;
lock (m_lock) // serialize cloning.
{
IFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
using (stream)
{
formatter.Serialize(stream, parent);
stream.Seek(0, SeekOrigin.Begin);
parentClone = (Parent)formatter.Deserialize(stream);
}
}

return parentClone;
}

关于c# - 序列化时如何维护对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9186559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com