Кажется, это происходит потому, что класс LookupItem
не имеет дочернего элемента в своем XML-представлении. Из-за этого XmlSerializer
считает его XML-элементом simpleContent . Если вы добавите новое свойство в LookupItem
, которое должно быть сериализовано как элемент XML, оно будет работать нормально.
Я просто потратил несколько минут на просмотр доступных атрибутов сериализации XML, но не смог найти ни одного, который позволил бы указать, что тип НЕ является элементом simpleContent
...
Так что я думаю, что вы могли бы заставить его работать, добавив фиктивное свойство или поле, которое вы никогда не используете в классе LookupItem
. Если вы никогда не назначите ему значение, оно останется нулевым и не будет сериализовано, но предотвратит обработку вашего класса как simpleContent
. Я знаю, что это грязный обходной путь, но я не вижу другого легкого пути ...
public class LookupItem
{
[System.Xml.Serialization.XmlAttribute()]
public int ID { get; set; }
[System.Xml.Serialization.XmlText()]
public string Name { get; set; }
public object _dummy;
}
(Кстати, обратите внимание, что атрибут Serializable
не нужен для сериализации XML.)
В любом случае, вам действительно нужно сериализовать Name
как текст XML? Это довольно редко, обычно элементы XML имеют либо простое содержимое (текст), либо дочерние элементы ... Их сочетание затрудняет чтение XML, поэтому, если вы не обязаны это делать, я предлагаю вам сериализовать Name
как атрибут или дочерний элемент.