だから、私はかなり厄介なレガシーデータを扱っており、その一部を RESTful API に渡す必要があります。
WebApi クライアント (nuget パッケージ) を使用していますが、問題が発生しています。モデル オブジェクトの 1 つに、無効な XML 文字 (0xf1 など) を含む文字列が含まれている場合があります。これらの値をデータに含めるべき理由はないので、実際にはそれらをフィルタリングしたいだけです。
私の問題: XmlMediaTypeFormatter がオブジェクト グラフをシリアル化しようとすると、これらの不適切な値のいずれかに遭遇するとスローされます。(期待される)
私がやりたいことは、エンコード可能な文字に静かにフォールバックすることです。
UTF8Encoding (以下のコードを参照) を置き換えてみましたが、それでも例外が発生します。DatacontractSerializer の奥深くで、独自のエンコーディング オブジェクトを使用しているようです。
エンコード エラーが発生したときに XmlMediaFormatter にフォールバック文字を使用させる方法を知っている人はいますか?
これが私がこれまでに試したことです:
var formatter = new System.Net.Http.Formatting.XmlMediaTypeFormatter();
formatter.SupportedEncodings.Clear();
// the second param in the ctor is throwOnInvalidBytes = false
var newUtf8Encoding = new System.Text.UTF8Encoding(false, false);
formatter.SupportedEncodings.Add(newUtf8Encoding);
var content = new System.Net.Http.ObjectContent(typeof(MyEntity), myInstance, formatter);
var stream = new MemoryStream();
content.CopyToAsync(stream).Wait(); // exception here, I hoped that fallback would occur
stream.Close();
- 私たちの長期的な解決策は、データを修正することでなければならないことを知っています。
- データを修正しておく唯一の方法は、不正な値を書き込んでいるレガシー コードを修正することであり、これにはかなりの時間と労力がかかります。やりますが、一時しのぎが必要です。