В Protobuf-net можно ли сериализовать неукрашенные классы? - PullRequest
5 голосов
/ 25 июня 2011

Чтобы сериализовать класс с помощью protobuf-net, необходимо предоставить атрибуты класса и свойств [ProtoContract] и [ProtoMember (n)] - где n равно 1,2,3, .. и т. Д.

Приступить к клонированию в зеркальное отображение класса, возможно ли сериализовать / десериализовать класс, который мы не можем контролировать?

Например:

с использованием ProtoBuf;

  • Serializer.Serialize (OutputStream, исключение);

или

  • Serializer.Serialize> (OutputStream, dataWithPossibleException);

NB.Сказать, что данные имеют [ProtoContract] / [ProtoMember], а другие нет.

возможные подходы:

  • Было бы хорошо, если бы у нас были "атрибуты расширения", которые работали как методы расширения.[невозможно]
  • реплицирует класс локально, а затем копирует в / из объекта перед сериализацией / десериализацией [это будет работать, но производительность снизится]
  • создать внешний файл прото / определение длякласс и хранить это в ресурсах?[кто-нибудь знает, как это сделать?]

1 Ответ

3 голосов
/ 25 июня 2011

Здесь есть опции в v2:

  • вы можете настроить RuntimeTypeModel, сообщая ему о типах и членах без каких-либо атрибутов
  • для типов, которые являются неуклюжими, суррогат может быть предоставлен для облегчения сериализации (он должен иметь операторы преобразования в / из исходного типа)
  • для API, в которых типы не имеют статического типа, есть возможность включить метаданные типа

Теперь, я думаю, что кое-что из этого затрагивает некоторые ваши вопросы. Если вы сможете полностью указать сценарий, который проблематичен, я мог бы быть более конкретным (или подумать о новых способах применения кода, чтобы заставить его работать).

Но чтобы ответить на главный вопрос (без оформления): да, в v2

...