通过序列化/反序列化方式实现DeepClone时出现问题。 事实是: 我希望我的类OwnDataset具有其深度克隆实例,通过以下两个常规过程 - 构造函数和GetObjectData声明:
protected OwnDataSet(SerializationInfo info, StreamingContext context)
: base(info, context)
{
DSType = DataSetType.Standard;
Attributes =
new OwnAttributeList(
(List<OwnAttribute>)
info.GetValue("Attributes", typeof (List<OwnAttribute>)));
IsLinkedDS = info.GetBoolean("IsLinkedDS");
PCAForScores = (PCA)info.GetValue("PCAForScores", typeof(PCA));
Levels = (string[])info.GetValue("Levels", typeof(string[]));
}
[SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
public override void GetObjectData(SerializationInfo info,
StreamingContext context)
{
base.GetObjectData(info, context);
info.AddValue("Attributes", new List<OwnAttribute>(Attributes), typeof(List<OwnAttribute>));
info.AddValue("IsLinkedDS", IsLinkedDS);
info.AddValue("PCAForScores", PCAForScores);
info.AddValue("Levels", Levels);
}
请注意,OwnDataset有其特性。其中一个名为“Attributes”,其类型为OwnAttributeList - OwnAttribute对象的集合。 当调用获取OwnDataset的deepclone实例时,在构造函数中,所有类型都很简单的属性,如IsLinkedDS(boolean),Levels(string [])......都成功了。好。 但是对于更复杂的类型化对象,例如Atttributes(类型化OwnAttributeList),错误地取出(集合中的元素数仍然是正确的,但每个元素都是NULL)! 在这种情况下有经验的人请帮助我或给我一些提示。我忘记了什么吗? 感谢您的关注和等待你的帮助。