BinaryFormatter.Deserialize HeaderHandler перехватывает возвращаемое значение - PullRequest
4 голосов
/ 28 марта 2012

Я использую BinaryFormatter.Deserialize(Stream, HeaderHandler). Возможно, я упустил что-то очевидное здесь, но я не могу найти примеров в Интернете, поэтому я надеюсь, что кто-то может пролить свет Я передал свой делегат HeaderHandler, который возвращает объект, но я не знаю, как получить тот объект, который он возвращает?

Ответы [ 2 ]

3 голосов
/ 28 марта 2012

K;отслеживается через отражатель.Единственное время, когда обычная реализация использует это значение, при обработке некоторых данных с помощью удаленного взаимодействия, если значение, возвращаемое из HeaderHandler, равно MarshalByRefObject, и в этом случае удостоверение получается и используется для обратной ссылки.В частности, конструктор 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 с точно данными, которые вы хотите отправить.

0 голосов
/ 28 марта 2012

Насколько я могу судить, BinaryFormatter ничего не делает с возвращенным объектом.

var deserializedObject = (TypeOfDeserializedObject)
                         BinaryFormatter.Deserialize(stream, headers => 
                         { 
                             //do stuff with your headers here
                             foreach (var header in headers)
                             {

                             }
                             return new object();
                         });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...