C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 45 を表示中)
■23980 / )  MemoryStreamとXmlWriter
□投稿者/ kobachi (1回)-(2008/08/26(Tue) 02:54:09)
kobachi さんの Web サイト

分類:[C#] 

はじめまして。C#でしがないプログラムを開発しているkobachiと申します。
ちょっとした問題にぶつかりましたので、新参者ですが質問をさせてください。

C#のバージョンは、2.0です。

----------
■状況説明
----------

現在、C#で記述されたクラスをXmlSerializerによって変換し、
TCPで転送するプログラムを作成しております。
たとえば、

▼----------【クラスここから】----------▼
    public class Data{
        public string Test = "This is test.";
    }
▲----------【クラスここまで】----------▲

というようなクラスがあったとします。
これをTCPで送信することが目的なので、次のようなコードで直接byte[]に変換します。

▼----------【コードここから】----------▼
    Data data = new Data();
    byte[] result = new byte[0];
    using(MemoryStream stream = new MemoryStream()){
        using(XmlWriter writer = XmlWriter.Create(stream)){
            XmlSerializer serializer = new XmlSerializer(typeof(Data));
            serializer.Serialize(writer, data);
        }
        result = stream.ToArray();
    }
▲----------【コードここまで】----------▲

すると、先頭に余計な「?」が入ったXMLが出力されます。
これは整形式のXMLではないと思いますが、Deserialize()はエラーもなくちゃんと通ります。

▼----------【出力結果ここから】----------▼
?<?xml version="1.0" encoding="utf-8"?><Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><Test>This is test.</Test></Data>
▲----------【出力結果ここまで】----------▲

XmlWriter.Create()にStringBuilderを渡した場合には、先頭に余計な「?」が入ることはありません。
XmlWriterSettingsを指定してみたりしましたが、特に変化はありません。


----------
■質問
----------

XmlWriter.Create()にMemoryStreamを渡してXmlSerializerによるSerializeを行ったとき、
先頭に「?」が挿入されたXMLが返ってくるのはバグでしょうか、それとも正常な動作なのでしょうか?
何か情報をご存じの方がいらっしゃいましたら、教えていただけないでしょうか。

返信 編集キー/


管理者用

- Child Tree -