Десериализовать двоичные данные в Silverlight 4 - PullRequest
1 голос
/ 12 октября 2011

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

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 12 октября 2011

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

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

0 голосов
/ 21 октября 2011

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

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

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

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

0 голосов
/ 12 октября 2011

Вы ищете BinaryReader ?

...