13

フォームに 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 要素の読み取りで問題に直面しています。私のクラスは

public class BackupScheduleSettings  
{  
        public BackupScheduleSettings()  
        {   
            ScheduledDay = new int[7];  
        }  

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

ScheduledDay に適切な値を持つ XML コンテンツをロードすると、クラス配列がまだ NULL のままです。

XML はレガシー コードであるため、XML の内容や形式を変更できません。XDocument は大きな XML であり、再度シリアル化する必要があるため、値を読み取るために XDocument を使用したくありません。

私は何の助けもなしにたくさん検索しました。どんなアイデアでも大歓迎です。

ありがとう...

4

3 に答える 3

22

あなたはしたくないXmlArrayItem。int の配列を親要素なしでシリアル化する必要があります。つまり、配列自体を で装飾する必要がありますXmlElementOrder特定の順序があるため、XmlElement 属性の値を使用する必要があります。それに応じて変更されたクラスは次のとおりです。

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>
于 2011-03-10T13:10:45.293 に答える
17

あなたの財産を飾る:

[XmlElement("ScheduledDay")]
public int[] ScheduledDay { get; set; }
于 2011-03-10T13:06:02.130 に答える
3

これを機能させるには、次のことを行う必要があります。

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

この属性を追加することにより、ScheduledDay 要素が (デ) シリアライザーによって認識されるたびに、この配列に追加する必要があることがわかります。

于 2011-03-10T13:04:16.360 に答える