Ошибка XML сериализации с Namespace и XmlInclude
Коротко: Есть абстрактный класс, он не сериализуется. Пишет об отсутствии XmlInclude, однако он есть.
InvalidOperationException: Тип ConsoleApp.B1 не ожидался. Используйте атрибут XmlInclude или SoapInclude для задания типов, которые не известны как статические.
Ниже код:
using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApp
{
[XmlRoot(Namespace = "root")]
public class Root
{
public B B{get;set;} = new B1();
}
[XmlInclude(typeof(B1))]
public abstract class B { }
public class B1 : B { }
class Program
{
static void Main()
{
Root root = new Root();
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("r", "root");
using (var stringWriter = new StringWriter())
using (var xmlWriter = XmlWriter.Create(stringWriter))
{
var serializer = new XmlSerializer(typeof(Root));
serializer.Serialize(xmlWriter, root, ns);
Console.WriteLine(stringWriter.GetStringBuilder().ToString());
}
Console.ReadLine();
}
}
}
Менять Namespace у B и B1 решит проблему, но это не мой вариант, классы запечатаны.