2012-05-07 22 views
2

データベースの一部のテキストフィールドに、制御文字が埋め込まれています。私はオブジェクトをシリアル化しようとしたときに、文字でxmlエラーを取得しようとしたときにのみ気づいた。おそらく他のものがあります。文字列Cの制御文字を置き換えます。

どのようにC#を使用して置き換えるのですか?このようなものがうまくいくと思いました。

text.Replace('\x2', ' '); 

しかし、それはありません。 助けていただければ幸いです。

答えて

7

文字列は不変です - あなたは再割り当てする必要があります。上記の言った

text = text.Replace('\x2', ' '); 
+0

ありがとうございます - 私はそれを知っていたはずです! – Graeme

2

まったく同じように、文字列はC#で不変です。つまり、次の文が表示されます。

text.Replace('\x2', ' '); 

は、指定した文字列を返しましたが、指定した文字列は変更されませんでした。あなたは戻り値をどこにも割り当てなかったので、それは失われました。あなたが頻繁に変更を行っている文字列を持っている場合、あなたは非常に多く、通常の文字列と同じように動作StringBuilderオブジェクト、で見えるかもしれません

text = text.Replace('\x2', ' '); 

、彼らは変更可能です:上記のステートメントは、問題を修正する必要がある理由ですしたがって、いくつかの状況においてはるかに効率的である。

幸運を祈る!

-Craig

1

あなたが扱っている大きな問題はXmlSerialization往復問題です。文字列で始まり、XMLにシリアル化してから、xmlを文字列に逆シリアル化します。最初の文字列と同じ文字列が常に生成されると予想されますが、文字列に制御文字が含まれている場合、逆シリアル化によって例外がスローされます。

StreamReaderの代わりにXmlTextReaderDeserializeメソッドに渡すことで修正できます。 XmlTextReaderのNormalizationプロパティをfalseに設定します。

文字列をCDATAとしてシリアル化することでこの問題を解決することもできます。詳細については、How do you serialize a string as CDATA using XmlSerializer?を参照してください。

関連する問題