2013-04-16 66 views
0

我如何使用XmlSerializer的創造這樣的結構,建立共同的根源:XmlSerialization。兩類

<Files Upload="True"> 
    <InputFiles> 
     <InputFile File="file.txt" ErrorCode="0" Version="0"/> 
     <InputFile File="file.txt" ErrorCode="0" Version="0"/> 
    </InputFiles> 
    <OutputFiles> 
     <OutputFile File="file.txt" ErrorCode="0" Version="0"/> 
     <OutputFile File="file.txt" ErrorCode="0" Version="0"/> 
    </OutputFiles> 
</Files> 

的問題是創建標籤文件

現在我正在被序列化的inputfiles這樣的代碼在一些類outputfiles:

private System.Collections.Generic.List<InputFile> _inputFiles = new System.Collections.Generic.List<InputFile>(); 
    [XmlIgnore] 
    public virtual System.Collections.Generic.List<InputFile> InputFiles 
    { 
     get 
     { 
      if (ModulesInBuild.ModulesList.Count != 0) 
      { 
       _inputFiles.Clear(); 
       foreach (var item in ModulesInBuild.ModulesList) 
       { 
        _inputFiles.Add(item); 
       } 
      } 
      return _inputFiles; 
     } 
    } 

    [XmlArray("InputFiles")] 
    [XmlArrayItem("InputFile")] 
    public virtual InputFile[] XmlInputFiles 
    { 
     get 
     { 
      var inputFiles = new InputFile[InputFiles.Count]; 
      InputFiles.CopyTo(inputFiles, 0); 
      return inputFiles; 
     } 
     set 
     { 
      InputFiles.Clear(); 
      InputFiles.AddRange(value); 
     } 
    } 

因此,這將是馬麗娟不是重寫大量的代碼,但只是添加標籤文件=)

回答

0

你可以做這樣的事情,然後用XmlSerializer對它進行序列化。

對於InputFile和OutputFile類中的屬性也使用XmlAttribute屬性。

[Serializable] 
public class Files 
    { 
     public Files(){} 

     [XmlAttribute()] 
     public bool Upload{get;set;} 

     public List<InputFile> InputFiles 
      { 
      get{retrun inputFiles;} 
      set{inputFiles=value;} 
      } 
     List<InputFile> inputFiles = new List<InputFile>(); 

     public List<OutputFile > OutputFiles 
      { 
      get{return outputFiles ;} 
      set{outputFiles =value;} 
      } 
     List<OutputFile > outputFiles = new List<OutputFile >(); 
    } 
+0

我做了一些更新到我的文章,可能看看它嗎?也許還有其他方式無法創造新課堂? – user1669713

+0

如果你想序列化屬性,[XmlIgnore]不是正確的做法。 – wonko79

+0

它錯誤鍵入)沒有XmlIgnore真的)這段代碼工作正常,但我不知道如何將InputFiles放入標記文件。 – user1669713

0

有很多方法可以解決這個問題。就我個人而言,我更喜歡添加新的父類,您可以添加您的InputFileOutputFile列表。但是,如果你不喜歡這個主意,你可以做其他兩兩件事之一:

  1. 實施IXmlSerializable和處理自己的事情
  2. 對於一個快速和骯髒的黑客,你可以做這樣的事情:

string serialized = //however you normally serialize your xml

string uglyHack = "<Files>" + serialized + "</Files>";

我不會推薦的最後一種方法,但無論漂浮你的船..

+0

感謝您的回覆,這很有趣! – user1669713