0

だから、私はかなり厄介なレガシーデータを扱っており、その一部を 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();

  • 私たちの長期的な解決策は、データを修正することでなければならないことを知っています。
  • データを修正しておく唯一の方法は、不正な値を書き込んでいるレガシー コードを修正することであり、これにはかなりの時間と労力がかかります。やりますが、一時しのぎが必要です。
4

0 に答える 0