Любой способ указать строку XML, используемую в xsi:type=""?

У меня есть иерархия классов, которые сериализуются в XML с помощью XMLSerialiser, Для этого я объявляю все конкретные типы с [XmlInclude], например.

 [XmlInclude(typeof(Derived))]
 public class Base
 {
 }

 public class Derived : Base
 {
 }

Экземпляр Derived сериализуется как:

<Base xsi:type="Derived" />

Есть ли способ изменить тип текста на что-то, кроме имени класса? например:

<Base xsi:type="Fred" />

2 ответа

Решение

Я думаю, что вы делаете это следующим образом:

[XmlType(TypeName = "Fred")]
public class Derived : Base
{
}

Используйте атрибут XmlType:

[XmlInclude(typeof(Derived))]
public class Base
{
}

[XmlType("Fred")]
public class Derived : Base
{
}

Это даст вам желаемое xsi:type при сериализации Derived объект с помощью Base сериализатору. Вывод моей тестовой программы:

<Base xsi:type="Fred"/>
Другие вопросы по тегам