Добавьте XmlAttribute в C # Class для сериализации

1

У меня тут немного головокружительный момент, так как я думаю, что делаю это правильно! Мне нужно создать 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 не сериализуется. Это определенно назначается объекту гонки перед сериализацией. Есть предположения? Я, очевидно, что-то пропустил, но я не уверен, как бы я мог проверить, где он не работает. Любая помощь будет принята с благодарностью!

Йон.

Теги:
serialization
xml-attribute

2 ответа

1

В классах, реализующих 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>
  • 0
    Благодаря JAT я впоследствии узнал, что xmlserializer действительно игнорирует свойства в классах, которые наследуются от collectionbase. В конце концов я создал класс контейнера данных для объекта гонки и передал ему свойство racename, так как мне нужно, чтобы каждая раса также содержалась в коллекции рас! Расы - это корень XML-файла. Класс datacontainer довольно неуклюж, как решение, однако я открыт для любых предложений относительно более чистого способа собрать все это вместе!
0

Я предлагаю вам создать тестовое консольное приложение в решении и проверить код, подобный этому http://pastebin.com/bP340WmR, если он отлично работает, создайте коллекции объектов и попытайтесь выполнить сериализацию. Выполнение этого шаг за шагом поможет понять, где именно проблема.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню