如何序列化?

using System; using System.Collections.Generic; using System.IO; class Program { static void Main() { // Get all files in Documents List dirs = FileHelper.GetFilesRecursive("S:\\bob.smith\\"); foreach (string p in dirs) { Console.WriteLine(p); } // Write count Console.WriteLine("Count: {0}", dirs.Count); Console.Read(); } } static class FileHelper { public static List GetFilesRecursive(string b) { // 1. // Store results in the file results list. List result = new List(); // 2. // Store a stack of our directories. Stack stack = new Stack(); // 3. // Add initial directory. stack.Push(b); // 4. // Continue while there are directories to process while (stack.Count > 0) { // A. // Get top directory string dir = stack.Pop(); try { // B // Add all files at this directory to the result List. result.AddRange(Directory.GetFiles(dir, "*.*")); // C // Add all directories at this directory. foreach (string dn in Directory.GetDirectories(dir)) { stack.Push(dn); } } catch { // D // Could not open the directory } } return result; var k = ""; result = k; } } 

这是我的代码。 我试图将结果序列化为XML文件(我想通过将其传递给var ,我可以使用该变量进行序列化)。 我很有智慧。 请有人帮忙。

奇怪的是由于某些原因我不能添加评论 – 作为回应,是的,我已经完成了关于序列化的无尽教程。 我是这个东西的完全新手并且坦率地说,这些教程对于大部分b / c无益,我无法将此function和序列化放在一起。 在这一点上,我正在寻找一个解决方案,因为我要严肃对待挫折。

您可以使用XmlSerializer:

 using System.Xml.Serialization; static void Main() { // Get all files in Documents List dirs = FileHelper.GetFilesRecursive(@"S:\\bob.smith\\"); XmlSerializer x = new XmlSerializer(dirs.GetType()); x.Serialize(Console.Out, dirs); Console.Read(); } 

如果您只想输出dirs列表的内容,那么使用XmlWriter可能最简单:

 XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; using (XmlWriter writer = XmlWriter.Create(@"c:\path\filename.xml", settings)) { writer.WriteStartElement("dirs"); dirs.ForEach(d => writer.WriteElementString("dir", d)); writer.WriteEndElement(); // dirs } 

结果将如下所示:

   c:\ c:\Program Files ...  

请注意,这可能不是在讨论.NET中的序列化时通常意味着什么,因为它除了其他内容之外不包含有关包含数据的对象类型的信息,因此您不能使用它来将xml数据反序列化为使用框架中可用的序列化机制列出。

更新

如果你想要更多“框架式”,你可以使用BinaryFormatter:

 // serialize the object to disk BinaryFormatter formatter = new BinaryFormatter(); using (Stream stream = File.OpenWrite(@"c:\temp\dirlist.data")) { formatter.Serialize(stream, dirs); } // at some other point, when you want to deserialize BinaryFormatter formatter = new BinaryFormatter(); List dirList; using (Stream stream = File.OpenRead(@"c:\temp\dirlist.data")) { dirList = (List)formatter.Deserialize(stream); } 

在这种情况下,您将在磁盘上获得一个二进制文件,这在文本编辑器中没有意义(但它看起来像这样;我已经引入了一些换行符以使其更“可读”):

 ÿÿÿÿ System.Collections.Generic.List`1[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] _items_size_version c:\ c:\Program Files 

我不希望听起来很卑鄙,但从您的问题来看,您似乎缺少一些与序列化有关的非常重要和基本的概念。

本教程可能是开始序列化的好地方。 试试这个,如果你有问题,可以随时在SO上发布。

希望这可以帮助,

另外,您可以使用所有子文件夹中的所有文件

 Directory.GetFiles(@"S:\\bob.smith\\", "*.*", SearchOption.AllDirectories)