При сериализации объекта с полиморфным элементом элемент xml, представляющий этот элемент, автоматически получает атрибут xsi: type, указывающий имя фактического типа.Теоретически, это может помочь в десериализации, но, к сожалению, часто бывает наоборот, как упоминалось здесь (вопрос не связан, взгляните на ответ JaedenRuiner): XmlSerializer заменяет xsi: type на имя узла
В моем случае мне нужно отправить сериализованный объект во внешнее приложение, имеющее совершенно другую архитектуру, и имя типа, которое я использую, не может вызвать здесь ничего, кроме путаницы.
Примеры классов:
public class Foo
{
public Bar Bar { get; set; }
}
public abstract class Bar
{ }
public class Baz : Bar
{ }
и сериализация:
public void FooTest()
{
var foo = new Foo { Bar = new Baz() };
var xDoc = new XDocument();
XmlSerializer objSerializer = new XmlSerializer(typeof(Foo), new System.Type[] { typeof(Baz) });
using (XmlWriter writer = xDoc.CreateWriter())
{
objSerializer.Serialize(writer, foo);
}
Console.WriteLine(xDoc.Root);
Console.ReadKey();
}
Результат:
<Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Bar xsi:type="Baz" />
</Foo>
Можно ли как-нибудь прекратить генерирование этого атрибута xsi:type="Baz"
?