none
オブジェクトをシリアライズしたデータを文字列として取得したい RRS feed

  • 質問

  • こんにちは。
    お世話になっています。

    早速ですが質問させて下さい。

    オブジェクトをシリアライズしたデータを文字列として取得しようと以下のように書いたのですがうまくいきません。

      //シリアライズ対象のクラス
      public class SampleClass {
        public int Number;
        public string Message;
      }
      
      class Program {
        static void Main(string[] args) {
          SampleClass cls = new SampleClass();
          cls.Message = "テスト";
          cls.Number = 123;
    
          System.Xml.Serialization.XmlSerializer serializer =
              new System.Xml.Serialization.XmlSerializer(
                  typeof(SampleClass));
    
          System.IO.MemoryStream ms = new System.IO.MemoryStream();
    
          serializer.Serialize(ms, cls);
    
          System.IO.StreamReader sr = new System.IO.StreamReader(ms);
          while (sr.Peek() > -1) {
            Console.WriteLine(sr.ReadLine()); //一行も表示されない
          }
          
          sr.Close();
          ms.Close();
    
          Console.ReadLine();
        }
      }
    

    どうぞよろしくお願いします。

    2009年10月27日 5:51

回答

  • 書き込み直後の時点で、ストリームの現在位置はストリームの末尾になっています。当然そこから読み始めても意味がありません。
    読み込む場合はストリームの Position なり Seek なりで現在位置を戻すようにしてください。

    初めから文字列としてシリアライズ結果を取得したいのなら、シリアライズ先を MemoryStream ではなく StringWriter にすることも考えられます。
    • 回答としてマーク __test__ 2009年10月27日 7:14
    2009年10月27日 6:17

すべての返信

  • 書き込み直後の時点で、ストリームの現在位置はストリームの末尾になっています。当然そこから読み始めても意味がありません。
    読み込む場合はストリームの Position なり Seek なりで現在位置を戻すようにしてください。

    初めから文字列としてシリアライズ結果を取得したいのなら、シリアライズ先を MemoryStream ではなく StringWriter にすることも考えられます。
    • 回答としてマーク __test__ 2009年10月27日 7:14
    2009年10月27日 6:17
  • 基本的な事を見落としていたのですね。
    おかげさまで期待通りの動作を実現できました。
    ありがとうございます。
    2009年10月27日 7:14