Десериализовать двоичные данные в Silverlight 4

Мне показалось, что я где-то читал, что Silverlight 4 будет содержать BinaryFormatter для поддержки сериализации / десериализации двоичных данных в клиентском приложении, но я не могу найти его, так что, полагаю, его там нет.

У меня есть существующая служба, к которой мне нужно получить доступ из приложения Silverlight 4. Сервис использует сокеты через TCP. Мне удалось подключить клиентское приложение и получать сообщения от службы, но я не могу десериализовать содержимое сообщения.

Сообщение состоит из следующего объекта, сериализованного на сервере:

class Message
{
    String Name { get; set; }
    Stream Data { get; set; }
}

У меня нет контроля над сервисом, и изменение формата, протокола и т. Д. Невозможно. (Также, fwiw, Name - переменная длина.)

Как я могу восстановить объект сообщения в моем клиенте Silverlight?

3 ответа

Решение

Итак, после долгих проб и ошибок я закончил нахождение следующего решения моей проблемы.

Во-первых, я смог получить доступ к коду сервера, который позволил мне изменить класс Message, поэтому вместо свойства Data, возвращающего Stream, он возвращает массив байтов. Затем я использую XmlSerializer для сериализации объекта в исходящий NetworkStream. По-видимому, XmlSerializer будет по умолчанию использовать кодировку Base64 и преобразовывать байтовый массив в строку, которая может быть включена в поток XML.

В клиенте Silverlight я использую XmlSerializer для десериализации массива байтов в объект на стороне клиента.

Не совсем то же самое, что двоичная сериализация, но конечная цель состояла в том, чтобы десериализовать двоичные данные (байтовый массив), полученные от Socket на SL-клиенте, и это привело меня туда.

Я бы даже не пытался написать бинарный десериализатор для Silverlight (я даже не уверен, что это возможно).

Вместо этого (предполагая, что хост-сайт ASP.NET) я поместил бы Службу WCF на хост-сайт, действующий как своего рода прокси. Служба WCF будет отправлять запросы в вашу службу от имени приложения Silverlight.

Вы ищете BinaryReader?