ここで明らかなことを見落としているBinaryFormatter.Deserialize(Stream, HeaderHandler).
可能性がありますが、オンラインで例を見つけることができないので、誰かが光を当てることができることを願っています. オブジェクトを返すデリゲート HeaderHandler を渡しましたが、それが返すオブジェクトを取得する方法がわかりません。
2195 次
2 に答える
3
K; リフレクターで追跡。通常の実装がこの値を使用するのは、リモーティングを介して一部のデータを処理するときに、 から返された値がHeaderHandler
でMarshalByRefObject
ある場合のみです。この場合、ID が取得され、リンクバックに使用されます。具体的にはSystem.Runtime.Remoting.Messaging.MethodCall
コンストラクタ。
しかし、それはすべて実装の詳細です! ほとんどの健全なシナリオでは、答えは次のとおりです。使用されていません。
実際、ヘッダー処理はメインのデシリアライゼーションの後に発生します。これにより、ヘッダー ハンドラーを使用してコンテキスト オブジェクトにいくつかの値を設定し、それを処理することができなくなります。
ただし、ヘッダー ハンドラーは引き続きローカル変数を更新できます。
string someValue = null;
object obj = serializer.Deserialize(source, headers => {
// check the headers and assign someValue based on
// what you find there; for brevity, make it up!
someValue = "something from the headers";
return null;
});
Console.WriteLine(someValue);
完全な字句閉鎖が大好きです。
ただし、個人的には、これはこれを行う方法ではないと結論付けています。送信したいデータを正確にDTOに転送するだけです。
于 2012-03-28T12:13:42.660 に答える
0
私が知る限り、 BinaryFormatter は返されたオブジェクトに対して何もしません。
var deserializedObject = (TypeOfDeserializedObject)
BinaryFormatter.Deserialize(stream, headers =>
{
//do stuff with your headers here
foreach (var header in headers)
{
}
return new object();
});
于 2012-03-28T12:02:53.050 に答える