Измените
[XmlArray("LabelTypes", ElementName="LabelType")]
на
[XmlArray]
ElementName
для XmlArrayAttribute
задает имя элемента контейнера и являетсясобственно то, что вы указываете в первом параметре ctor!Итак, у вас есть ctor, который говорит: «этот класс сериализуется как контейнер с именем LabelTypes
; на самом деле не нужно ждать, я хочу, чтобы контейнер получил имя LabelType
».Именованный параметр перезаписывает то, что говорит первый безымянный параметр.
И фактически, поскольку вы хотите, чтобы элемент контейнера был назван LabelTypes
, то есть то, что на самом деле называется членом, вам не нужноукажите это вообще.
Возможно, вы подумали о XmlArrayItemAttribute
, который управляет именами отдельных членов сериализованной коллекции, но и здесь вам это не нужно.
Мой обычный подход для работы с сериализатором xml заключается в том, чтобы создавать объекты вручную, а затем смотреть на XML, который они сериализуют с до .В этом случае, используя код, который у вас есть в настоящее время, вы получите xml, подобный следующему:
<?xml version="1.0" encoding="utf-16"?>
<LabelTypesCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<LabelType>
<LabelType>
<Name>one</Name>
</LabelType>
<LabelType>
<Name>two</Name>
</LabelType>
</LabelType>
</LabelTypesCollection>
, что подсказало мне неверный спецификатор LabelType
.
Обратите внимание, что вы тожеXmlRoot
на LabelTypesCollection
или XmlElement
на Name
, так как вы просто указываете, что в любом случае придет в сериализатор xml.