2016-09-12 4 views
0

私はカスタムクラスのインスタンスをファイルに保存するメソッドを持っています。このファイルは0値のバイト(ヌル文字)で埋められているため、アプリケーションが起動しないことに気づいたことがあります。以前これは起こったことがなく、うまく動いていたようです。誰かがこのコードで奇妙な何かを見ますか?シリアライザやメモリストリームがゼロ値の配列を返す原因になりますか?それとも、それが別のアプリケーションの仕事だと思わなければなりませんか?XmlSerializerとMemoryStreamは0の値バイトの配列を返しますか?

private readonly XmlSerializer _serializer = new XmlSerializer(typeof(MySettings)); 

    public void Save(MySettings config) 
    { 
     using (var stream = new MemoryStream()) 
     { 
      _serializer.Serialize(stream, config); 
      byte[] binaryConfig = stream.ToArray(); 
      File.WriteAllBytes(_configFilePath, binaryConfig); 
     } 
    } 

答えて

0

このようなものを使用する方が簡単ではないでしょうか?あなたのオブジェクトがシリアル化中にXMLテキストに変換されるよう

XmlSerializer x = new XmlSerializer(typeof(MySettings)); 
using (FileStream stream = new FileStream(_configFilePath, FileMode.Create, FileAccess.Write)) 
    { 
     x.Serialize(stream, config); 
     stream.Close(); 
    } 

XMLファイルは、任意の0バイトまたはnul文字を含めることはできません。ファイルの内容を確認するには、テキストエディタを使用してXMLファイルを開いてください。