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 回答