Десериализовать двоичные данные в 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.