Я сериализую класс, который неправильно создает узел одного из его свойств.моя классовая структура выглядит следующим образом:
Вот верхний класс, который я сериализую
[DataContract]
public class XmlReportConfiguration
{
[DataMember]
[XmlArrayItem(nameof(SingleValueDescription), typeof(SingleValueDescription))]
[XmlArrayItem(nameof(MultiValueDescription), typeof(MultiValueDescription))]
public List<Description> Descriptions { get; set; }
}
MultiValueDescription наследует от SingleValueDescription, который наследует от Description.
Description имеет тег XMlIncludeдля описания как единственного, так и множественного значения
Моя проблема возникает, когда я иду для сериализации описания, имеющего тип MultiValueDescription, узел xml сериализует его как SingleValueDescription.
Если я удаляю XmlArrayItemЗапись для SingleValueDescription из класса XmlReportConfiguration, затем она работает так, как я хочу, но я не могу удалить это объявление по понятным причинам.
Есть ли здесь какой-то тег / объявление, которое я пропускаю и которое вызывает сериализаторигнорировать дочерний класс для узла и использовать родительский класс?
Вот метод при создании сериализатора:
public static string SerializeReportConfiguration(XmlReportConfiguration config)
{
XmlSerializer serializer = new XmlSerializer(typeof(XmlReportConfiguration));
StringBuilder sb = new StringBuilder();
using (TextWriter writer = new StringWriter(sb))
{
serializer.Serialize(writer, config);
}
return sb.ToString();
}
public static XmlReportConfiguration DeserializeReportConfiguration(string xml)
{
XmlSerializer serializer = new XmlSerializer(typeof(XmlReportConfiguration));
using (StringReader reader = new StringReader(xml))
{
XmlReportConfiguration sessionConfig = serializer.Deserialize(reader) as XmlReportConfiguration;
return sessionConfig;
}
}