2015-06-18 4 views
1

Я работаю над собственной программой удаленного рабочего стола C#. Я задавался вопросом, могу ли я Сериализовать с помощью BinaryFormatter объект моего собственного , например, «Пакет», который содержит свойства скриншотов BitMap, мышиных шнуров и, возможно, текста. И тогда клиент будет десериализовать его. Теоретически это может быть удобный способ сделать это. Возможно ли это?BinaryFormatter для сериализации

+1

где код? –

+0

Теоретически все может быть сериализовано и/или десериализовано. – Icemanind

+0

будет ли он запрограммирован на один объект, и я смогу получить доступ ко всем свойствам? –

ответ

2

BinaryFormatter не является хорошим выбором для сериализации по сети или постоянному хранению, он предназначен для сериализации при общении на одном компьютере. Это чрезвычайно нетерпимо к различиям в версии любой сборки, на которую ссылается ваш сериализованный объект на противоположных концах соединения, у меня лично были обновления Windows, которые не применяются на одной машине, чтобы обе стороны не могли общаться.

Вместо этого используйте сериализатор, более предназначенный для сетевой связи, такой как DataContractSerializer или сторонний двоичный сериализатор, такой как ProtoBuf-net.

3

Это возможно, но я отговариваю его. Алгоритм BinaryFormatter является проприетарным, поэтому очень трудно писать приложения не.NET, используя такие данные. Формат изменился в прошлом и может измениться в будущем, поэтому небезопасно использовать его для постоянных данных, которые вы ожидаете снова открыть в будущем с новой версией .NET. Я думаю, что BinaryFormatter изначально был предназначен для передачи данных между процессами на одной машине, а не для сохранения данных.

BinaryFormatter неэффективен для данных, содержащих несколько свойств, поскольку требует десериализации всего объекта для доступа к любому полю. Это особенно проблематично, если данные содержат большие данные, такие как изображения.

Если ваши данные не требуют произвольного доступа, я предлагаю сериализовать его в текстовом формате, таком как JSON или XML. Если данные большие, вам следует рассмотреть возможность сжатия текстовых данных.

Если вам необходим случайный доступ к данным, вы должны исследовать хранилища данных, такие как MySQL или SQL Server CE.

Смежные вопросы