Можно ли использовать ProtoBuf-Net с механизмом ISerializable? - PullRequest
1 голос
/ 04 февраля 2010

У нас есть проект, который использует сериализацию, реализуя ISerializable и используя BinaryFormatter. Мы переходим на .net compact, у которого нет класса BinaryFormatter. Мне было интересно, можем ли мы использовать ProtoBuf-Net. Можем ли мы проинструктировать ProtoBuf-Net использовать GetObjectData () для сериализации? В частности, я хочу узнать, как использовать функцию Serializer.Serialize (SerializableInfo, ISerializable).

Добавлен Я посмотрел на исходный код, и я вижу, что хотя функция

Serializer.Serialize (SerializableInfo, T t), где T является ISerializable не использует ограничение T вообще ISerializable. Почему T был объявлен ISerializable?

1 Ответ

2 голосов
/ 05 февраля 2010

Поддержка ISerializable существует (на данный момент) как механизм для внедрения protobuf-net в середину существующих API, использующих BinaryFormatter - например, вы можете сделать это, чтобы уменьшить накладные расходы на удаленное взаимодействие .NET или(сериализованное) состояние сеанса.Однако это все равно приводит к появлению BLOB-объекта pb-net в середине оболочки BinaryFormatter (в частности, заголовок bf указывает конкретное имя-сборки-qualfied-name).

По поводу ограничения- это просто, чтобы помочь направлять использование;этот API только предназначен для , который будет использоваться как часть этой инъекции в BinaryFormatter через ISerializable.В противном случае предпочтительнее просто использовать API на основе Stream.

Если вы смотрите на CF, то, конечно, BinaryFormatter перестает быть полезным, но API на основе Stream подойдет.Это работает на CF, но вы должны заметить, что для моделей с большим количеством классов в настоящее время есть некоторые глюки на CF, вызванные чрезмерным использованием обобщенных типов («отсутствующий метод» или что-то подобное).Хорошая новость заключается в том, что я добился хорошего прогресса в некотором рефакторинге, который угробил это, сделав его намного более стабильным на небольших платформах.

...