2010-06-08 31 views
2

在我的解决方案中,我创建了公共类来存储值并已声明[DataContract/DataMember]属性。是否需要在公共方法中声明属性[DataMember(Order = n)]?

例如,

[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网串行序列化存储在我的数据,我要声明的属性。但我不确定这种方法。

请大家帮忙。 预先感谢您。

回答

1

protobuf-net是一个值序列化器;除了属性,它不知道任何有关方法的知识。如果使用相同(或兼容)类型,则该方法将自动出现,但这与protobuf-net(或任何其他序列化)无关。

重新添加属性的主题;与目前的版本,它通常需要东西知道哪些属性序列化(更重要的是:用什么标识符)。有隐式模式,但我不推荐它,除非你知道你不会再次改变类型。永远。完全一样。

在“v2”中,您可以删除属性;你必须使用这个外部模型的选择,所以你可能有:

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

(不要引用我确切的API,但类似的东西)

然后可以使用model.Serialize

0

否 - 不应该在那里。你不能连载一个方法!

0

只有属性不能以这种方式读写......所以不能为方法添加属性。

相关问题