[Serializable]
атрибут не имеет отношения к сериализации XML. Сериализатор XML сериализует свойства с помощью публичного getter и setter. Кроме того, вы должны сказать в XML сериализатор дополнительных типов, он мог бы использовать, те, которые не известны статический, пропускание Type[]
дополнительного аргумента в сериализаторе CTOR или добавлении [XmlInclude(typeof(B))]
и [XmlInclude(typeof(C))]
EDIT:
следующий код:
[XmlInclude(typeof(B))]
[XmlInclude(typeof(C))]
public class A
{
public int Value;
public A() { }
public A(int i) { Value = i; }
}
public class B : A
{
public double DoubleValue;
public B() { }
public B(int i, double d) : base(i) { DoubleValue = d; }
}
public class C : A
{
public string StringValue;
public C() { }
public C(int i, string s) : base(i) { StringValue = s; }
}
public class Container
{
public List<A> Items;
public Container()
{
Items = new List<A>();
}
}
class Program
{
static void Main(string[] args)
{
Container container = new Container();
container.Items.Add(new B(0, 1.3d));
container.Items.Add(new B(1, 0.37d));
container.Items.Add(new C(2, "c"));
using (System.IO.StreamWriter writer = new System.IO.StreamWriter(@"C:\TEMP\Container.xml"))
{
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Container));
serializer.Serialize(writer, container);
}
}
}
производит, что XML:
<Container xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Items>
<A xsi:type="B">
<Value>0</Value>
<DoubleValue>1.3</DoubleValue>
</A>
<A xsi:type="B">
<Value>1</Value>
<DoubleValue>0.37</DoubleValue>
</A>
<A xsi:type="C">
<Value>2</Value>
<StringValue>c</StringValue>
</A>
</Items>
</Container>
Просто добавьте '[Serializable]' атрибут к классу , –
[Serializable] не применим к XML-сериализации, видимо, –
. Мой вопрос в основном касается двух полиморфных классов потомков. –