1

まず第一に、protobuf-net の速度と使いやすさが気に入っています。現在、.NET クラス ライブラリを開発しており、実際に参照せずにクラスの一部を protobuf-net-ready にしたいと考えています。理由は次のとおりです。

  1. クライアントがどの環境を使用するかわからないため、どの protobuf-net バイナリを選択すればよいかわかりません
  2. フットプリントのサイズを最小限に抑えたい (シリアル化はまったく必要ないかもしれません)

私が理解しているように、これは手動で .proto ファイルを作成することで実行できます。誰かが私に説明したり、これを行う方法をリンクしたりできますか? 属性の説明から .proto ファイルを生成する方法はありますか? また、クライアントのシリアライゼーション/デシリアライゼーション コードはどのようになりますか?

4

1 に答える 1

1

私が理解しているように、これは.protoファイルを手動で書くことで行うことができます

いいえ; これは必要ではなく、役に立ちません。

現在次のようなタイプがあるとします。

[ProtoContract]
public class Foo {
    [ProtoMember(1)]
    public int Bar {get;set;}
    // ...
}

必要なことを行うには、次の 2 つのオプションがあります。

  1. 組み込みのプラットフォーム属性を使用します。たとえば、次のようになります。

    [DataContract]
    public class Foo {
        [DataMember(Order=1)]
        public int Bar {get;set;}
        // ...
    }
    

    また

    [XmlType]
    public class Foo {
        [XmlElement(Order=1)]
        public int Bar {get;set;}
        // ...
    }
    
  2. 実行時にモデルを明示的に構成します (モデルが で動作しようとする前にFoo):

    RuntimeTypeModel.Default.Add(typeof(Foo), false).Add(1, "Bar");
    

    (もちろん、後者はまだProtoBufある時点で話す必要がありますが、POCO タイプがシリアライゼーションについて知る必要はありません)

これらのいずれかが機能するはずです。

于 2013-07-17T11:19:51.247 に答える