1

最近、開発者の 1 人が、データ メンバーとしてマークされていないオブジェクトをデータ コントラクトに追加したというシナリオに遭遇しました。DataContractSerializer を使用して、制御しているハードウェアの構成ファイルを保存しています。明らかに、シリアル化操作は成功しませんでした。

これにより明らかになった主な問題は、プロセス中に構成ファイルが破壊されたことです。オブジェクトグラフをシリアル化する前に、オブジェクトグラフがシリアル化されることを確認する方法を知っている人はいますか?

シリアル化例外からのスタック トレースは、XmlObjectSerializerContext.CheckIfTypeSerializable(..) への呼び出しで失敗します。シリアル化を試みる前に使用できるこのようなものがあるかどうか疑問に思っています。

グラフをメモリにストリーミングしてからファイルにストリーミングする必要は避けたいのですが、これでうまくいくと思います...

助言がありますか?

4

1 に答える 1

0

スコット、シリアル化は成功したが、*デ*シリアル化は成功しなかったという意味だと思います。追加のデータ メンバーを追加しても注釈を付けるのを忘れた場合、シリアライザーはシリアル化中にそれを無視します。また、逆シリアル化中に追加のメンバーが検出された場合、厳密なスキーマの有効性を要求している場合、またはメンバーの存在を要求している場合はスローされます。それ以外の場合は、単にその値を解析して先に進むことはありません。

これを処理するには、IExtensibleDataObject を使用する、 DataMembersを要求する、サロゲートを使用するなど、いくつかの方法があります。より具体的なガイダンスについては、/msdn.microsoft.com/en-us/library/ ms731083.aspx [前方互換データ コントラクト] を参照してください。

お役に立てれば!

于 2011-02-03T19:24:14.693 に答える