У меня тут немного головокружительный момент, так как я думаю, что делаю это правильно! Мне нужно создать xml файл, как показано ниже (я пропустил декларации пространства имен)
<races> <race racename="race one"> <horse> <name>Silver</name> <age>6</name> </horse> </race> </races>
Занятия в классе - это сборная классической расы, а групповая гонка - это коллекция классной лошади. Ниже приведен соответствующий код для класса гонки, который у меня есть и вызывает проблему (я думаю, по крайней мере).
[Serializable]
[XmlType("race")]
public class Race : CollectionBase
{
private string _raceName;
[XmlAttribute("racename")]
public string RaceName
{
get
{
return this._raceName;
}
set
{
this._raceName = value;
}
}
У меня есть xml файл, как ожидалось. ИСКЛЮЧИТЬ атрибут racename не сериализуется. Это определенно назначается объекту гонки перед сериализацией. Есть предположения? Я, очевидно, что-то пропустил, но я не уверен, как бы я мог проверить, где он не работает. Любая помощь будет принята с благодарностью!
Йон.
В классах, реализующих IEnumerable, только сериализованные коллекции, а не общедоступные.
Используйте коллекцию Horse в классе Race и удалите :CollectionBase
[Serializable]
[XmlType("race")]
public class Race
{
[XmlElement("horse")]
public List<Horse> Horses { get; set; }
[XmlAttribute("racename")]
public string RaceName
{
get;
set;
}
public Race()
{
Horses = new List<Horse>();
}
}
результат
<race xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" racename="race one">
<horse>
<Name>Silver</Name>
<Age>6</Age>
</horse>
</race>
Я предлагаю вам создать тестовое консольное приложение в решении и проверить код, подобный этому http://pastebin.com/bP340WmR, если он отлично работает, создайте коллекции объектов и попытайтесь выполнить сериализацию. Выполнение этого шаг за шагом поможет понять, где именно проблема.