XmlSerializer не получает открытый массив с атрибутом XmlArray - PullRequest
1 голос
/ 26 ноября 2011

У меня есть контейнерный класс, который я хотел бы сериализовать, вызвав один из его методов, но когда он сериализуется, он не включает в себя открытый массив.

[XmlType("ActivityList")]
public class ActivityList : IEnumerable<Activity>
{
    [XmlArray("Balony")] //The only member I want serialized
    public Activity[] Activities { get; set; }

    public ActivityList()
    {
        this.Activities = new Activity[0];
    }

    public void Save(string filename)
    {
        XmlSerializer serializer = new XmlSerializer(this.GetType());
        using (TextWriter writer = new StreamWriter(filename))
        {
            serializer.Serialize(writer, this);
        }
    }
}

public class Activity
{
    [XmlAttribute]
    public string Name { get; set; }

    [XmlAttribute]
    public string Description { get; set; }

    [XmlIgnore]
    protected Duration Duration { get; private set; }

    public Activity()
    { }
}

Ответы [ 2 ]

0 голосов
/ 28 ноября 2011

Похоже, XmlSerializer делает забавные вещи с объектами, которые наследуются от IEnumerable. Если вы не наследуете от IEnumerable, то XmlSerializer найдет массив просто отлично.

0 голосов
/ 26 ноября 2011

Я думаю, вы забыли добавить [XmlArrayItem("BalonyItem")] под [XmlArray("Balony")]

...