递归序列化方法

时间:2014-02-26 15:32:13

标签: c# recursion xml-serialization

我真的需要你的帮助。

实际上,我从路径中读取了一些文件并将其序列化。直到现在,没什么特别的。 现在:我有主文件和子文件(包含新内容),如我的例子所示:

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()

对它们进行血清化
// 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;
 }

这个想法是,当我读取一个子文件时,它必须在其主文件中被序列化,并且这是通过递归来实现的。问题是我没有找到“基础案例”来停止再生和我我变得疯狂......

任何帮助对我来说都很棒...... 在此先感谢!!

1 个答案:

答案 0 :(得分:0)

嗯,您明确表示不要使用[XmlIgnore]标记序列化您的子文件。删除该标记,您应该看到您的子文件(您可能需要调整您的数据类型 - 我不记得List<>是否可序列化...

相关问题