簡體   English   中英

C#中的傳統XMLElement

[英]Condtional XMLElement in c#

我正在嘗試使用以下類文件序列化為XML

public class BatchFile
{
    [XmlElement("File1")]
    public List<string> FileObject { get; set; }
}

以下是我的C#代碼以序列化此類

 var batchFile = new BatchFile();
 XmlSerializer serializer = new XmlSerializer(typeof(BatchFile));
 using (TextWriter writer = new StreamWriter(@"E:\BatchFile1.xml"))
  {               
  serializer.Serialize(writer, batchFile);
  }

我需要動態使用FileObject屬性上的XMLElement。

這將是File1或File2或File3。

我不確定如何進行此操作。

已經提到了如何在C#序列化類中為動態XML元素建模? 動態更改xml元素值

但是他們似乎沒有為我工作。

首先-我不認為您在使用正確的工具來完成這項工作。 XML序列化是一種工具,它允許您將對象轉換為易於傳輸(並且易於閱讀)的形式-並返回。 這確實意味着一個固定的模式。

如果您堅持使用XML序列化來實現,那么為什么不采用最簡單的方法呢?

[XmlElement("File1")]
public List<string> File1 { get; set; }

[XmlElement("File2")]
public List<string> File2 { get; set; }

[XmlElement("File3")]
public List<string> File3 { get; set; }

[XmlIgnore]
public List<string> FileObject
{
   get { return this.File1 ?? this.File2 ?? this.File3; }
}

如果你想命名節點File1通過FileN你將不得不實行IXmlSerializable ,並建立/手動解析XML。 沒有可以枚舉集合項然后給出順序名稱的屬性。

如果僅支持有限數量的元素(例如3),則可以為這3個元素添加屬性:

public class BatchFile
{
    [XmlIgnore]
    public List<string> FileObject { get; set; }

    public string File1 
    { 
        get {return FileObject[0];} 
        set {FileObject[0] = value; }
    }

    public string File2 { get; set; }
    { 
        get {return FileObject[1];} 
        set {FileObject[1] = value; }
    }

    public string File3 { get; set; }
    { 
        get {return FileObject[2];} 
        set {FileObject[2] = value; }
    }

}

當然,您需要添加適當的邊界檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM