C # DatacontractSerializer через сокеты нескольких корневых элементов - PullRequest
0 голосов
/ 07 декабря 2009

Я пишу приложение Sivlerlight Chat, используя Sockets и DataContractSerializer.

У меня есть иерархия классов сериализуемых объектов с определениями, общими для клиента Silverlight и сервера C #.

Когда приятель входит в систему, он отправляет сообщение на сервер, и если он проверяется, ему отправляется подтверждение, за которым следуют несколько сообщений, в которых сообщается, кто еще находится в сети (а также некоторые другие сообщения). Затем клиент ожидает в сокете и готовит байты от него. Затем он попытается десериализовать объекты из полученного байтового потока. Однако, поскольку сервер отправил несколько сообщений, поток байтов будет содержать xml для более чем одного элемента, и при его десериализации выдается исключение множественного корня.

Каково стандартное решение для десериализации потока объектов с сокета с использованием DatacontractSerializer?

Спасибо

1 Ответ

0 голосов
/ 07 декабря 2009

Я нашел решение, хотя оно кажется немного странным.

Поскольку сериализатор контракта данных создает XML, я решил просто записать дополнительный байт '\ 0' в поток после каждого объекта. Затем, в конце, я просто беру (b => b! = 0) из потока байтов, чтобы найти объекты. Пока это работает, но, похоже, есть крайний случай, о котором я не знаю.

...

...