在我的解决方案中,我创建了公共类来存储值,并且已经声明了[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中使用序列化程序来序列化我存储的数据,我必须声明这些属性。但我对方法的确不确定。
请帮忙。 先感谢您。
答案 0 :(得分:1)
protobuf-net是一个值序列化器;除了属性之外,它对方法一无所知。如果使用相同(或兼容)类型,则该方法将自动出现,但这与protobuf-net(或任何其他序列化)无关。
重新添加属性的主题;在当前版本中,它通常需要 something 来了解要序列化的属性(更重要的是:使用什么标识符)。 是隐式模式,但除非您知道,否则我不建议再次更改类型。永远。完全没有。
在“v2”中,您可以删除属性;你可以选择使用外部模型,所以你可能有:
var model = TypeModel.Create();
model[typeof(MeterSizeInfo)].Add("MeterSizeId", "MeterSizeName");
(不要引用我的确切的API,但有类似的东西)
然后您可以使用model.Serialize
等
答案 1 :(得分:0)
不 - 不应该在那里。你无法序列化方法!
答案 2 :(得分:0)
不仅属性以这种方式可读写......因此您无法为方法添加属性。