子对象的Deepclone问题需要深度序列化

时间:2011-02-09 04:49:13

标签: c# serialization clone

通过序列化/反序列化方式实现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)! 在这种情况下有经验的人请帮助我或给我一些提示。我忘记了什么吗? 感谢您的关注和等待你的帮助。

0 个答案:

没有答案