4

Protocontractおよびprotoファイルを使用せずにProtocolBuffersC#(ProtoBuf-net)を使用して複雑なオブジェクトをシリアル化することは可能ですか?

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

ProtoContractを使おうとしましたが、それでもオブジェクトをシリアル化できません(LLBLGen ORMオブジェクトです)。

4

1 に答える 1

5

はい; ここにはさまざまなオプションがあります。

  • まず、「暗黙のフィールド」は、メンバーを追加すると脆弱であることに注意してください。これは、私が望むよりも多くの推測を行う必要があるためです。安定した契約でのみ使用してください
  • GlobalSettingsを介してデフォルトの動作をグローバルに適用できますが、私はそれに対してアドバイスする傾向があります
  • protobuf-net v1は、次のものでも機能します。
    • XmlElementがOrderを指定している限り、XmlType/XmlElement属性のペア
    • DataMemberがOrderを指定している限り、DataContract/DataMember属性のペア
    • 部分クラス; プロパティの場合でも、ProtoPartialMember属性などを介して
  • protobuf-net v2は、TypeModelを使用して実行時に対象の型を記述することにより、いかなる種類の属性もなしで100%使用できます。これにより、必要に応じてモデルを専用のシリアル化dllにコンパイルすることもできます(特にAOT依存のデバイスで使用する場合)

もっとアドバイスすることはできますが、いくつかの選択肢があります。どちらが最も適切かを教えてください。詳細を追加できます。

Re.protoファイル; コードファーストアプローチ(または既存のモデルへのシリアル化の改造)が役立つ場合が多いことを私は認識しているので、これらはprotobuf-netでは完全にオプションです(そして常にオプションでした)。もちろん、.protoを使用することを選択した場合、3つはコードジェネレーターです。

于 2011-05-10T18:34:02.090 に答える