2

私のソリューションでは、値を格納するためのパブリッククラスを作成し、[DataContract/DataMember]属性をすでに宣言しています。

例えば、

[DataContract]
public class MeterSizeInfo
{
    string _meterSizeId;

    [DataMember(Order = 1)]
    public string MeterSizeId
    {
        get { return this._meterSizeId; }
        set { this._meterSizeId = value; }
    }

    string _meterSizeName;

    [DataMember(Order = 2)]
    public string MeterSizeName
    {
        get { return this._meterSizeName; }
        set { this._meterSizeName = value; }
    }

}

次に、プロジェクト全体を公開する別のパブリックメソッドを追加する必要があります。[DataMember(Order = 3)]を追加する必要があるのではないかと思います。

    [DataMember(Order = 3)] //<--- must declare or not?
    public string DoSomething()
    {
        // do something...
    }

protobuf-netでシリアライザーを使用してに格納されているデータをシリアル化する場合は、それらの属性を宣言する必要があることを理解しています。しかし、方法についてはよくわかりません。

助けてください。前もって感謝します。

4

3 に答える 3

1

protobuf-net は値シリアライザーです。プロパティを除いて、メソッドについては何も知りません。同じ (または互換性のある) タイプを使用する場合、メソッドは自動的に存在しますが、これは protobuf-net (またはその他のシリアル化) とは関係ありません。

属性の追加のトピックについて。現在のリリースでは、通常、どのプロパティをシリアル化するかを知るための何かが必要です(さらに重要なのは、どの識別子を使用するか)。暗黙的なモードがありますが、型を二度と変更しないことがわかっている場合を除き、お勧めませんこれまで。まったく。

「v2」では、属性を削除できます。これには外部モデルを使用するオプションがあるため、次のような場合があります。

var model = TypeModel.Create();
model[typeof(MeterSizeInfo)].Add("MeterSizeId", "MeterSizeName");

(正確なAPIについて私を引用しないでください、しかしそのようなもの)

model.Serializeその後、などを使用できます

于 2010-06-09T12:43:21.923 に答える
0

いいえ - そこにいるべきではありません。メソッドをシリアライズすることはできません!

于 2010-06-08T12:31:25.077 に答える
0

そのように読み書きできるのはプロパティだけではありません...したがって、メソッドの属性を追加することはできません。

于 2010-06-08T12:33:27.123 に答える