2014-02-26 84 views
0

我真的需要你的幫助。遞歸序列化方法

其實,我從一個路徑讀取了一些文件,並對它們進行了序列化。到現在爲止,沒什麼特別的 NOW:我喜歡在我的例子主要文件,並子文件(新內容):

disktest.xml // Main file 
disktest.1.xml //Sub file 
disktest.2.xml //Sub file 

MYFILE類看起來是這樣的:

public class myFile 
{ 
    // Some XmlArguments like name, blablabla (xml elements) 
    [XmlAttribute] 
    public string Name {get; set;} 
    [XmlAttribute] 
    public string Version {get; set;} 
    [XmlAttribute] 
    public string Description{get; set;} 
    ... 

    // And a list of my subfiles 
    [XmlIgnore] 
    public List<myFile> SubFiles {get; set;} 

} 

public myFile() 
{ 
    name = ""; 
    ... 
    SubFiles = new List<myFile>(); 
} 

喜歡我在我的道路讓所有的文件我用的LoadFile()serilize他們

// Read all Files and deserialize them 
List<string> allfiles = Directory.GetFiles("path", "pattern").ToList(); 

List<myFile> files= allfiles.Select(f => myFile.LoadFile(f)).ToList(); 


public static myFile LoadFile(string fileName) 
{ 
    myFile ret = new myFile(); 

    try 
    {     
     using (StreamReader sr = new StreamReader(fileName)) 
     { 
      XmlSerializer ser = new XmlSerializer(typeof(myFile)); 
      ret = (myFile)ser.Deserialize(sr); 
     } 

    } 
    catch (Exception ex) 
    { 
      ret.IsError=true; 
      ret.Error=ex.Message;     
    } 

    return ret; 
} 

的想法是,當我讀到一個子文件,它有它的主文件中被序列化,這與遞歸性做出..問題是,I D ont找到「Base Case」來停止遞歸和我變得瘋狂......

任何幫助對我來說都會很棒...... 在此先感謝!

回答

0

嗯,你明確說過不要用[XmlIgnore]標籤來序列化你的子文件。刪除該標籤,你應該看到你的子文件(你可能需要調整你的數據類型 - 我不記得是否List<>是可序列化或不...

+0

嗨LB2感謝您的快速答案,每個文件具有不同的屬性喜歡,以及更多的東西,如果它的主要或子文件發生變化..我需要序列化每個文件的內容,如果文件是一個子文件,它必須在同一個對象中返回... – minoyo

+1

@minoyo不幸的是,我不能按照你的評論,如果你不想要子文件的屬性序列化,那麼將它們標記爲忽略。或者,如果你不想要包括子文件屬性,但只是文件內容,你可以保持忽略原樣,並在你的主文件中創建一個返回子文件內容的屬性,並對其進行序列化。在prope的setter上rty,當內容被反序列化器分配給它時,寫它以便它從文本重新創建子文件類和它的所有屬性。 – LB2