2017-05-23 14 views
1

3つの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

でも十分にメモリ内書き込みを忘れました。それは私が訓練の間に学んだものの1つですが、これまでに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]); 
        } 

       } 
      } 
     } 


    } 
} 
関連する問題