У меня проблема при реализации 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)!
Любой опытный в этом случае, пожалуйста, помогите мне или дайте мне несколько советов. Я что-то забыл?
Спасибо за ваше внимание и жду вашей помощи.