4

ここで明らかなことを見落としているBinaryFormatter.Deserialize(Stream, HeaderHandler).可能性がありますが、オンラインで例を見つけることができないので、誰かが光を当てることができることを願っています. オブジェクトを返すデリゲート HeaderHandler を渡しましたが、それが返すオブジェクトを取得する方法がわかりません。

4

2 に答える 2

3

K; リフレクターで追跡。通常の実装がこの値を使用するのは、リモーティングを介して一部のデータを処理するときに、 から返された値がHeaderHandlerMarshalByRefObjectある場合のみです。この場合、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 に答える