Нужно сериализовать следующий класс в XML, при этом предполагается что также может быть и бинарная сериализация
public class A
{
public Type CurrentType;
public object Value;
}
Для того, что бы научить xml сериализатор сериализовывать и дессириализовывать класс с полем типа object (которое может быть произвольного типа, указанного в поле CurrentType), реализую ISerialazble.
public class A : ISerialazble
{
public Type CurrentType;
public object Value;
protected MessageContent(SerializationInfo info, StreamingContext context)
{
if (info == null)
throw new ArgumentNullException("info");
CurrentType = (Type) info.GetValue("CurrentType", typeof (Type));
Value = info.GetValue("Value", CurrentType);
}
protected virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("CurrentType", CurrentType);
info.AddValue("Value", Value);
}
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
if (info == null)
throw new ArgumentNullException("info");
GetObjectData(info, context);
}
}
И ничего не работает, при сериализации даже не заходит в GetObjectData... Видимо что то я явно неправильно понимаю в сериализации...
Здравствуйте, Igor Trofimov, Вы писали:
А>>Для того, что бы научить xml сериализатор сериализовывать и дессириализовывать класс с полем типа object (которое может быть произвольного типа, указанного в поле CurrentType), реализую ISerialazble.
iT>XML-сериализация и ISerializable — это две совершенно не связанные вещи.
iT>Для custom XML serialization есть IXmlSerializable.
iT>А ISerializable — это для "стандартной" сериализации форматировщиками Remoting'а.
Да я так и подозревал... Вообще это в высшей степени странно сделано
.