В основном: XML-элементы могут иметь два вида свойств, атрибутов и элементов. Вы определили элемент XML task
и атрибут на task
с именем id
, поэтому сериализатор добавляет атрибут к task
.
Теперь предположим, что вы хотите добавить элементы, которые должны находиться в task
- это тоже нормально, как я уже говорил, элементы XML могут содержать другие элементы или иметь атрибуты. Просто определите любые элементы, которые вы хотите поместить в task
... в task
.
Если вы хотите, чтобы атрибут был присоединен к другому элементу, вам нужно создать новый элемент XML (здесь, соответствующий классу) и буквально установить его как тип атрибута, используя синтаксис [XmlAttribute("id")]
.
Возможно, здесь для вас есть несоответствие - когда вы определяете простейшую форму элемента, мы можем назвать это simpleType, и он может иметь значения, которые представляют собой Strings или Integer или любой тип относительно примитивного типа (даты действительны тоже). Но если вы хотите, чтобы тот же элемент также имел атрибуты, он внезапно должен стать complexType, так как он имеет complexContent - он может содержать как простое содержимое, так и свойства, как, скажем, атрибут.
Посмотрите, как писать XML-схемы - у w3schools есть превосходных учебных пособий - Я думаю, вы получите гораздо лучшее понимание всего этого сочетания простого и сложного контента. По сути, определяя сериализацию XML для ваших классов, вы также определяете схему XML; и вы можете скомпилировать свой код в такую схему. Понимание того, как создавать схемы, позволит вам понять, как создать свой код для генерации соответствующих схем, и, кроме того, понять ваш вывод сериализации.