我有一个用CSLA.netEntity
装饰[DataContract(IsReference = true)]
和派生UndoableBase
的自定义基类。保留 IsReference 对于保留对象引用数据很重要。
[Serializable]
[DataContract(IsReference = true)]
public abstract class Entity : UndoableBase
使用以下代码片段进行序列化时出现异常:
public void SerializeToFile(string fileName, T obj)
{
_serializer = new DataContractSerializer(typeof(T));
Serialize(fileName, obj);
}
private void Serialize(string fileName, T obj)
{
using (var fs = File.Open(fileName, FileMode.Create))
{
_serializer.WriteObject(fs, obj);
fs.Close();
}
}
System.Runtime.Serialization.InvalidDataContractException
“Entity”类型的 IsReference 设置为“True”,但其父类“Csla.Core.UndoableBase”的相同设置为“False”。派生类型的 IsReference 值必须与基类型相同。将“Entity”类型的设置更改为“False”,或将“Csla.Core.UndoableBase”类型的设置更改为“True”,或者不明确设置 IsReference。
如果我完全删除这个 IsReference 属性,我开始收到以下错误:
'XYZ' 类型的对象图包含循环,如果禁用参考跟踪,则无法序列化。
现在我的问题是如何通过使用某些 API 在序列化期间更改IsReference
设置来解决它。Csla.Core.UndoableBase
在研究这个主题时,我遇到了这篇文章,其中谈到了使用DataContractSurrogate
. 如果在这种情况下有帮助,请帮助如何具体使用它,或者建议任何其他解决它的技术。