Deserialize multiple XML elements with the same name through XmlSerializer class in C# Deserialize multiple XML elements with the same name through XmlSerializer class in C# xml xml

Deserialize multiple XML elements with the same name through XmlSerializer class in C#


You don't want XmlArrayItem. You want the array of ints to be serialized without a parent element, which means you should decorate the array itself with XmlElement. Because you have a particular order, you will want to use the Order value on the XmlElement attribute. Here's the class, modified accordingly:

public class BackupScheduleSettings{    public BackupScheduleSettings()    {        ScheduledDay = new int[7];    }    [XmlElement(Order=1)]    public int AggressiveMode;    [XmlElement(Order=2)]    public int ScheduleType;    //[XmlArrayItem("ArrayWrapper")]    [XmlElement(Order=3)]    public int[] ScheduledDay { get; set; }    [XmlElement(Order=4)]    public int WindowStart;    [XmlElement(Order=5)]    public int WindowEnd;    [XmlElement(Order=6)]    public int ScheduleInterval;}

Here's the generated xML:

<BackupScheduleSettings>  <AggressiveMode>0</AggressiveMode>  <ScheduleType>0</ScheduleType>  <ScheduledDay>0</ScheduledDay>  <ScheduledDay>0</ScheduledDay>  <ScheduledDay>0</ScheduledDay>  <ScheduledDay>0</ScheduledDay>  <ScheduledDay>0</ScheduledDay>  <ScheduledDay>0</ScheduledDay>  <ScheduledDay>0</ScheduledDay>  <WindowStart>0</WindowStart>  <WindowEnd>0</WindowEnd>  <ScheduleInterval>0</ScheduleInterval></BackupScheduleSettings>


Decorate your property:

[XmlElement("ScheduledDay")]public int[] ScheduledDay { get; set; }


You should just have to do the following for this to work:

[XmlElement]public int[] ScheduledDay { get; set; }

By adding this attribute, every time the ScheduledDay element is seen by the (de)serializer it will know to add it to this array.