У меня снова возникла проблема с работой моего сериализатора. У меня есть BaseClass А и производный класс B:XML-сериализация с производными типами
class Program
{
static void Main(string[] args)
{
A foo = new B();
// determine that the class B overrides A
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
overrides.Add(typeof(A), new XmlAttributes
{
XmlElements = { new XmlElementAttribute("B", typeof(B)) }
});
XmlSerializer ser = new XmlSerializer(typeof(A), overrides);
ser.Serialize(new XmlTextWriter("test.xml", Encoding.Default), foo);
}
}
public class A { public int a;}
public class B : A { public int b;}
Но когда я запускаю эту небольшую программу, я получаю Exception
XmlRoot и XmlType атрибутов не может быть определена для типа ConsoleApplication1.A
, но я никогда не определял корень или атрибут типа для класса A, поэтому я действительно смущен этим сообщением. Есть ли что-нибудь за кулисами, которые я должен указать? Все, что я хочу сделать, это сериализовать экземпляр B, который просто добавляет некоторые свойства в определение A ...
Что не так с моим решением? –
Я добавил третий параметр в XmlSerializer, чтобы указать массив возможных типов, которые также могут быть получены из A (в дополнение к B). – HimBromBeere