2017-05-23 114 views
1

我写了一段代码,它将三个XML文档序列化并将它们写入本地文件夹。我想知道是否可以序列化它们并保存在内存中而不是使用本地路径?另外,是否可以“随时”压缩这些文件,以便我可以将压缩文件附加到电子邮件中?这里是我到目前为止的代码,有人可以给我一个关于如何修改这段代码的线索,以便它可以在内存中完成所有的工作吗?如何序列化xml文件并将它们压缩到内存中

XmlSerializer serializer = new XmlSerializer(typeof(DataCollectionXMLModel.ArrayOfCertQuestion)); 

for (int i = 0; i < cachedList.Count; i++) 
    { 
     if (i == 0) documentName = "commonInformation.xml"; 
     if (i == 1) documentName = "contactInformation.xml"; 
     if (i == 2) documentName = "extraInformation.xml"; 

     StreamWriter writer = new StreamWriter("C:\\Temp\\" + documentName); 
     this.serializer.Serialize(writer, cachedList[i]); 
     writer.Close(); 
    } 
+0

没有本地写呢?如果不是本地的,你想把文件写入哪里?只要它是一个有效的文件路径,并且您具有该位置的适当权限,则可以指示'StreamWriter'写入任何您想要的位置。 – Flater

+0

@Flater在内存中的例子?我只需要生成这些文件并压缩它们,以便它们可以通过电子邮件发送(全部由代码完成),但不确定这是否可能,因此我的问题 – user3845868

+0

够公平了,我忘记了内存中的文字。这是我在训练过程中学到的东西之一,但迄今为止从未在超过6年的专业经验中使用过它:)将查找答案 – Flater

回答

0

您可以使用内存流来编写序列化数据并创建归档。

例子:

public class Program 
{ 
    [Serializable] 
    public class Tst 
    { 
     public string A { get; set; } 
    } 

    static void Main(string[] args) 
    { 
     var serializer = new XmlSerializer(typeof(Tst)); 

     var arr = new Tst[] 
     { 
      new Tst { A = "s1"}, 
      new Tst { A = "s2"}, 
     }; 

     using (var stream = new MemoryStream()) 
     { 
      using (var archive = new System.IO.Compression.ZipArchive(stream, ZipArchiveMode.Create, true)) 
      { 
       for (int i = 0; i < arr.Length; i++) 
       { 
        var documentName = "def.xml"; 

        if (i == 0) documentName = "commonInformation.xml"; 
        if (i == 1) documentName = "contactInformation.xml"; 

        var entry = archive.CreateEntry(documentName, CompressionLevel.NoCompression); 

        using (var writer = new StreamWriter(entry.Open())) 
        { 
         serializer.Serialize(writer, arr[i]); 
        } 

       } 
      } 
     } 


    } 
} 
相关问题