Раньше не сталкивался с сериализацией объектов, особенно с сериализацией в XML и обратно, но пришлось - да не знаю как быть с объектами в которых присутствует поле класса Object, в котором могут быть объекты нескольких типов.
Пример XML
public class BoxError {
public String Message;
}
[XmlRootAttribute("TypeA")]
public class PackageTypeA {
public Int32 ID;
public Int64 Number;
}
[XmlRootAttribute("TypeB")]
public class PackageTypeB {
public Int32 ID;
public Byte Type;
}
[XmlRootAttribute("TypeC")]
public class PackageTypeC {
public Int32 ID;
public String Name;
}
Понятно, что классов не достаточно - нужна ещё какая-то настройка сериализатора.
Кто знает, как настроить сериализатор (XmlAttributes из коробки) для десериализации XML в объект типа BoxPackages? Подскажите, пожалуйста?
Ответ
Класс XmlSerializer умеет сериализовать только известные типы. Т.к. в массве object[] может быть любой объект любого типа, в конструкторе этого класса надо перечислить все возможные типы объектов, которые предполагается использовать:
Type [] extraTypes = new Type[3];
extraTypes[0] = typeof(PackageTypeA);
extraTypes[1] = typeof(PackageTypeB);
extraTypes[2] = typeof(PackageTypeC);
// Create the XmlSerializer instance.
XmlSerializer mySerializer = new XmlSerializer(typeof(BoxPackages),extraTypes);
Этот пример основан на XmlSerializer - конструктор
Комментариев нет:
Отправить комментарий