Для начала: Это также для десериализации REST, поэтому о пользовательском XmlSerializer не может быть и речи.
У меня есть иерархия классов, которые должны быть сериализуемыми и десериализуемыми из «Конверта». Он имеет элемент массива с именем «Items», который может содержать подклассы абстрактного «Item».
[XmlArray("Items")]
public Item [] Items { get; set; }
Теперь мне нужно добавить XmlArrayItem, но число не является «фиксированным». До сих пор мы использовали отражение, чтобы найти все подклассы с KnownTypeProvider, чтобы легко расширять сборку новыми подтипами. Я действительно не хочу жестко закодировать все элементы здесь.
Класс определяется соответственно:
[XmlRoot]
[KnownType("GetKnownTypes")]
public class Envelope {
но это не помогает.
Изменение элементов на:
[XmlArray("Items")]
[XmlArrayItem(typeof(Item))]
public Item [] Items { get; set; }
Результат:
{"Тип
xxx.Adjustment
не ожидал Используйте XmlInclude
или атрибут SoapInclude для указания
типы, которые не известны статически. "}
при попытке сериализации.
Кто-нибудь знает, как я могу использовать XmlInclude, чтобы указать на поставщика известного типа?