データベースの一部のテキストフィールドに、制御文字が埋め込まれています。私はオブジェクトをシリアル化しようとしたときに、文字
と
でxmlエラーを取得しようとしたときにのみ気づいた。おそらく他のものがあります。文字列Cの制御文字を置き換えます。
どのようにC#を使用して置き換えるのですか?このようなものがうまくいくと思いました。
text.Replace('\x2', ' ');
しかし、それはありません。 助けていただければ幸いです。
データベースの一部のテキストフィールドに、制御文字が埋め込まれています。私はオブジェクトをシリアル化しようとしたときに、文字
と
でxmlエラーを取得しようとしたときにのみ気づいた。おそらく他のものがあります。文字列Cの制御文字を置き換えます。
どのようにC#を使用して置き換えるのですか?このようなものがうまくいくと思いました。
text.Replace('\x2', ' ');
しかし、それはありません。 助けていただければ幸いです。
文字列は不変です - あなたは再割り当てする必要があります。上記の言った
text = text.Replace('\x2', ' ');
まったく同じように、文字列はC#で不変です。つまり、次の文が表示されます。
text.Replace('\x2', ' ');
は、指定した文字列を返しましたが、指定した文字列は変更されませんでした。あなたは戻り値をどこにも割り当てなかったので、それは失われました。あなたが頻繁に変更を行っている文字列を持っている場合、あなたは非常に多く、通常の文字列と同じように動作StringBuilderオブジェクト、で見えるかもしれません
text = text.Replace('\x2', ' ');
、彼らは変更可能です:上記のステートメントは、問題を修正する必要がある理由ですしたがって、いくつかの状況においてはるかに効率的である。
幸運を祈る!
-Craig
あなたが扱っている大きな問題はXmlSerialization往復問題です。文字列で始まり、XMLにシリアル化してから、xmlを文字列に逆シリアル化します。最初の文字列と同じ文字列が常に生成されると予想されますが、文字列に制御文字が含まれている場合、逆シリアル化によって例外がスローされます。
StreamReader
の代わりにXmlTextReader
をDeserialize
メソッドに渡すことで修正できます。 XmlTextReaderのNormalizationプロパティをfalse
に設定します。
文字列をCDATAとしてシリアル化することでこの問題を解決することもできます。詳細については、How do you serialize a string as CDATA using XmlSerializer?を参照してください。
ありがとうございます - 私はそれを知っていたはずです! – Graeme