アプリケーションが無効な XML を解析しようとしたために発生した、クライアントから報告された奇妙な問題のトラブルシューティングを行っています。根本的な原因は、XML 文字列がどのようにエンコードされてからデコードされるかに関係していると思います。XML文字列(最初から有効であることがわかっています)を取得し、それをバイト配列に変換して readonly でラップする内部APIがありますMemoryStream
。次に、ストリームが文字列に変換されてから に渡されXDocument.Parse(string)
ます。後者の呼び出しは失敗し、「ルート レベルのデータが無効です。行 1、位置 1」と表示されます。とにかく、根本的な原因は、文字列をエンコードしてからデコードする方法に関係していると思います。実際、デバッグ コードの次の行は、渡されたものとは異なる文字列を返します。
Encoding.Default.GetString(Encoding.Default.GetBytes(GetMeAnXmlString())));
途中で使用Encoding.Default
してから元に戻すと、最初に使用したものとは異なる文字列が生成されます。それはクレイジーです。何か案は?
ノート:
XML を含むストリームを取得する、変更できない API を使用しているため、Encoding.Default
. そうすることで、すべてが正常に機能しているクライアントの生産上の問題 (別名ショーストッパー) のリスクが生じます。