3

各 protobuf シリアル化データに独自のバージョン番号をタグ付けしたいと考えています。必要に応じて、データのシリアル化に使用されたバージョンを確認できます。protobuf はアイデアに基づいて設計されているため、バージョンを確認する必要はありません。

これを行うには、.net シリアライゼーションで行ってきたのと同じ方法を使用して、バージョン フィールドを追加します。

これがprotobufでも推奨される方法であることを確認したいだけです。

class protodata1
{
  public protodata1()
 {
  version = 1;
 }
  [Protomember(1)]
  int version { get; set;}
  [Protomember(2)]
  int somedata { get; set;}
}

また、protobuf-net で上記のように行う必要がありますか? クラスが非サイラル化されている場合にオーバーライドされるコンストラクターでバージョンを割り当てます。新しいオブジェクトをシリアル化するには、バージョン 1 を使用します。

4

1 に答える 1

1

「バージョン」の意味が単にデータフィールドである場合は、そうです。シリアル化されたメンバーとして追加するだけです。これは、シリアル化中に特別な意味を持たないことに注意してください (たとえば、別のコントラクトを介して実行する場合)。ただし、根本異なるメッセージ構造 (悪い考えとりあえず)。

追加する唯一の注意点は、この番号をまだ含んでいない既存のデータはすべて「バージョン 1」であると主張することです。「v2」では、コンストラクターをスキップする WCF アプローチを使用する別のオプションがあります (必要な場合)。これは、これらのケースが代わりに「バージョン 0」にデフォルト設定されることを意味します。おそらく、混乱が少なくなります (または、より混乱します。決定はお任せします)。

于 2010-08-11T08:15:42.247 に答える