Можно ли заставить сериализатор не генерировать атрибут xsi: type? - PullRequest
0 голосов
/ 08 февраля 2019

При сериализации объекта с полиморфным элементом элемент 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"?

...