C# 通过C中的XmlSerializer类反序列化具有相同名称的多个XML元素#

C# 通过C中的XmlSerializer类反序列化具有相同名称的多个XML元素#,c#,xml,xml-serialization,xml-deserialization,C#,Xml,Xml Serialization,Xml Deserialization,我在表单中有一个XML <BackupSchedule> <AggressiveMode>0</AggressiveMode> <ScheduleType>0</ScheduleType> <ScheduledDay>0</ScheduledDay> <ScheduledDay>1</ScheduledDay> <Schedu

我在表单中有一个XML

 <BackupSchedule>
    <AggressiveMode>0</AggressiveMode>  
    <ScheduleType>0</ScheduleType>  
    <ScheduledDay>0</ScheduledDay>  
    <ScheduledDay>1</ScheduledDay>  
    <ScheduledDay>0</ScheduledDay>  
    <ScheduledDay>0</ScheduledDay>  
    <ScheduledDay>0</ScheduledDay>  
    <ScheduledDay>0</ScheduledDay>  
    <ScheduledDay>0</ScheduledDay>  
    <WindowStart>480</WindowStart>  
    <WindowEnd>1020</WindowEnd>  
    <ScheduleInterval>0</ScheduleInterval>  
  </BackupSchedule>
现在,当我加载具有ScheduledDay的正确值的XML内容时,我的类数组仍然为NULL

我不能修改XML的内容/格式,因为它是遗留代码。我不想使用XDocument读取该值,因为它是一个大型XML,我需要再次序列化它

我在没有任何帮助的情况下搜索了很多。任何想法都将受到高度赞赏


谢谢…

您只需执行以下操作即可实现此功能:

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

通过添加此属性,每当(反)序列化程序看到ScheduledDay元素时,它就会知道如何将其添加到此数组中。

装饰您的属性:

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

您不需要
XmlArrayItem
。您希望在不使用父元素的情况下序列化int数组,这意味着您应该使用
xmlement
装饰数组本身。因为您有一个特定的顺序,所以需要在XmlElement属性上使用
order
值。下面是相应修改的类:

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;
}
以下是生成的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>

0
0
0
0
0
0
0
0
0
0
0
0

No-这行不通。
XmlArrayItem
告诉序列化程序将数组的元素作为子元素放在表示数组的父元素中。原始海报的要求是数组没有父元素。
<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>