Можно ли сериализовать сложный объект с помощью протокольных буферов C # (ProtoBuf-net) - PullRequest
4 голосов
/ 10 мая 2011

Можно ли сериализовать сложный объект с помощью протокольных буферов C # (ProtoBuf-net) без использования Protocontract и прототипов?

[ProtoBuf.ProtoContract(ImplicitFields = ProtoBuf.ImplicitFields.AllPublic)]

Я пытался использовать ProtoContract, но даже тогда я не могу сериализоватьобъект (это объект LLBLGen ORM).

1 Ответ

5 голосов
/ 10 мая 2011

Да;здесь есть различные варианты;

  • во-первых, обратите внимание, что «неявные поля» хрупки, если вы добавляете членов, поскольку они должны делать больше догадок, чем мне бы хотелось;используйте только то, что со стабильными контрактами
  • вы можете применить поведение по умолчанию глобально через GlobalSettings, но я склоняюсь к тому, чтобы советовать против него
  • protobuf-net v1 также может работать с
    • Пары атрибутов XmlType / XmlElement, если XmlElement определяет пары атрибутов Order
    • DataContract / DataMember, если DataMember определяет частичные классы Order
    • ;даже для свойств, через атрибуты ProtoPartialMember и т. д.
  • protobuf-net v2 можно использовать на 100% без каких-либо атрибутов, используя TypeModel для описания интересных типов во время выполнения ;это также может скомпилировать модель в выделенную dll сериализации, если вам нужно (в частности, для использования с AOT-зависимыми устройствами)

Я могу посоветовать больше, но здесь представлен ряд опций;скажите мне, какие из них являются наиболее подходящими, и я могу добавить больше деталей.

Re .proto files;это (и всегда было) совершенно необязательно с protobuf-net, так как я признаю, что во многих случаях полезен подход, основанный на коде (или модификация сериализации для существующей модели).Три - это генератор кода, если вы, конечно, решите использовать .proto.

...