2010-06-08 59 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

只有屬性不能以這種方式讀寫......所以不能爲方法添加屬性。

相關問題