C# 递归序列化方法

C# 递归序列化方法,c#,recursion,xml-serialization,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 el

我真的需要你的帮助

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

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>();
}
公共类myFile
{
//一些XmlArguments,如name、blabla(xml元素)
[XmlAttribute]
公共字符串名称{get;set;}
[XmlAttribute]
公共字符串版本{get;set;}
[XmlAttribute]
公共字符串说明{get;set;}
... 
//以及我的子文件列表
[XmlIgnore]
公共列表子文件{get;set;}
} 
公共myFile()
{
name=“”;
... 
子文件=新列表();
}
像这样,我从路径中获取所有文件,并使用LoadFile()将它们序列化

//读取所有文件并反序列化它们
List allfiles=Directory.GetFiles(“路径”、“模式”).ToList();
List files=allfiles.Select(f=>myFile.LoadFile(f)).ToList();
公共静态myFile加载文件(字符串文件名)
{
myFile ret=新建myFile();
尝试
{                  
使用(StreamReader sr=新StreamReader(文件名))
{
XmlSerializer ser=新的XmlSerializer(typeof(myFile));
ret=(myFile)序列反序列化(sr);
}
}
捕获(例外情况除外)
{
ret.IsError=true;
ret.Error=ex.Message;
}
返回ret;
}
其思想是,当我读取一个子文件时,它必须在其主文件中序列化,这是通过递归实现的。。问题是我找不到阻止递归的“基本情况”,我快疯了

任何帮助都会对我很好。。。
提前谢谢

好吧,您特别说过不要用
[XmlIgnore]
标记序列化子文件。移除该标记,您将看到您的子文件(您可能需要调整您的数据类型-我不记得
列表
是否可序列化…

Hi LB2感谢您的快速回答,每个文件都有不同的属性,如、,如果是主文件或子文件,则会有更多内容发生更改。我需要序列化每个文件的内容,如果文件是子文件,则必须以相同的格式返回object…@minoyo很遗憾,我无法理解您的评论。如果您不希望子文件属性序列化,请将其标记为忽略。或者,如果您不希望包含子文件属性,而只包含文件内容,则可以保持忽略不变,并在主文件中创建一个返回子文件内容的属性,然后序列化It、 在属性的setter上,当内容由反序列化程序分配给它时,写入它,以便它从文本中重新创建子文件类及其所有属性。
// 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;
 }