2009-06-08 11 views
1

xmlのブロックを返すWCFサービスがあります。 1つの要素はCData []セクションです。私のアプリケーションは、データベースからHTMLファイルを読み込み、ABCPDFを使用してPDFバイト[]配列に変換します。次に、私のXmlWriterでCDataセクションにバイトを追加します。C#:xml CDataのバイト配列

問題は、結果のXMLは次のようになります:

<![CDATA[System.Byte[]]]> 

私はCDATAセクションにバイトの文字列を取得できますか?私は次のようなものを試してみた:

string str; 
ASCIIEncoding enc = new ASCIIEncoding(); 
str = enc.GetString(theData); 

Convert.ToBase64String(theData); 

イム立ち往生!どんな助けも素晴らしいだろう、ありがとう!

+0

Convert.ToBase64Stringを使用すると、あなたの出力に何が得られますか?おそらくそれを行う最良の方法です(ASCIIEncoding.GetStringを使用するのは、バイトが有効なASCII文字列を表す場合のみです)。 –

答えて

6

Convert.ToBase64String(data)を使用すると、は間違いなくです。両端を制御できれば、ここに行く方法です。あなたは "未加工の"バイトを送信し、それらが有効なテキストデータであると思わないようにします。反対側にConvert.FromBase64String(text)を使用してください。

私はWCFが自動的にこれを処理していないことに少し驚いています。私は自分で使っているとは言えません(Marc Gravellがポップインするかもしれません - 彼はそれについて多くの経験を持っていますが、私はそれがバイト配列を公開することを期待しています)。なぜあなたはXMLのレベルに関与していますか?

+0

特にnul(0)を含むXML文書では、多くの制御文字は使用できません。 – Richard

+0

Convert.ToBase64String()は動作していますが、まだメソッド内でバイト配列を返していました。 Grrrr !!!ありがとうございました... – Blaze

0

問題がどこで起こっているのか正確に言うのは難しいです。より完全なコード例が役に立ちます。しかし、あなたがシリアライズしているものから見ると、ToString()があなたのbyte[]で呼び出されているように見えます。

ワイヤでバイナリデータを送信しようとしている場合は、Convert.ToBase64String()を使用する必要があります。受信フォーマットを管理していない場合は、必要なエンコーディングを調べる必要があります。