是否有必要在公共方法上声明属性 [DataMember(Order=n)] ?
在我的解决方案中,我创建了公共类来存储值并已声明 [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 中使用序列化器来序列化存储在其中的数据,我必须声明这些属性。但我不确定方法。
请帮忙。 先感谢您。
In my solution, I have created public class to store value and already declare [DataContract/DataMember] attribute.
For example,
[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; }
}
}
Then I need to add another public method exposing to entire project.
I wonder I have to add [DataMember(Order = 3)] for it or not.
[DataMember(Order = 3)] //<--- must declare or not?
public string DoSomething()
{
// do something...
}
I understand that if I want to use serializer in protobuf-net to serialize my data stored in, I have to declare those attribute. but I'm not sure about that on method.
please help.
Thank you in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
protobuf-net 是一个值序列化器;除了属性之外,它对方法一无所知。如果您使用相同(或兼容)的类型,则该方法将自动出现,但这与 protobuf-net (或任何其他序列化)无关。
重新讨论添加属性的话题;在当前版本中,它通常需要一些东西来知道要序列化哪些属性(更重要的是:使用什么标识符)。有一种隐式模式,但我不推荐它,除非您知道您不会再次更改类型。曾经。完全没有。
在“v2”中,您可以删除属性;您可以选择为此使用外部模型,因此您可能会:(
不要在确切的 API 上引用我,而是类似的东西)
然后您可以使用
model.Serialize
等protobuf-net is a value serializer; it doesn't know anything about methods, except for properties. If you use the same (or compatible) type, then the method will be present automatically, but this is nothing to do with protobuf-net (or any other serialization).
Re the topic of adding attributes; with the current release it generally needs something to know which properties to serialize (and more importantly: with what identifiers). There is an implicit mode, but I don't recommend it unless you know you aren't going to be ever changing the type again. Ever. At all.
In "v2", you can remove the attributes; you have the option of using an external model for this, so you might have:
(don't quote me on the exact API, but something like that)
You can then use
model.Serialize
etc不——不应该在那里。你不能序列化一个方法!
No - shouldn't be there. You can't serialise a method!
不仅属性以这种方式可读可写......所以您不能为方法添加属性。
No only properties are readable and writable in that way... so you can't add the attribute for a method.