Проблема Deepclone с дочерним объектом нуждается в глубокой сериализации - PullRequest
1 голос
/ 09 февраля 2011

У меня проблема при реализации DeepClone способом сериализации / десериализации. Факт: Я хочу, чтобы у моего класса OwnDataset был свой экземпляр deepclone, на 2 ниже общих процедур - объявлены конструктор и 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 имеет свои особенности. Один из них называется «Атрибуты», тип которого OwnAttributeList - коллекция объектов OwnAttribute. При вызове для получения экземпляра глубокого клона OwnDataset в конструкторе все свойства, тип которых является простым, например, IsLinkedDS (логический), Уровни (строка []) ... были успешно выведены. ХОРОШО. Но для более сложного типизированного объекта, такого как Atttributes (типизированный OwnAttributeList), вылез неправильно (номер элемента в коллекции все еще правильный, но каждый из элементов равен NULL)! Любой опытный в этом случае, пожалуйста, помогите мне или дайте мне несколько советов. Я что-то забыл? Спасибо за ваше внимание и жду вашей помощи.

...