【发布时间】:2012-10-12 09:54:00
【问题描述】:
我不认为这是重复的。我已经阅读了一些内容,但没有找到与此相同的内容。似乎字段可以在二进制格式化程序和 protobuf 中序列化,但不能在 XML 中序列化。我不知道 JSON。
我正在考虑用 protobuf-net 替换标准的 .NET 二进制序列化程序。原因是为了提高速度并获得更小的持久文件大小。
在 NET Binary 中,我只是将类标记为可序列化,然后将其保留。我怀疑不好。
使用 protobuf-net,我需要使用 [ProtoMember()] 属性指定要序列化的内容。我的新手测试表明,如果标记为自动属性,私有字段会被序列化。
我根本不想更改类代码定义,因为我仍然需要能够反序列化由 NET 序列化程序创建的旧持久数据。我混合了:
- 在类中使用的私有字段
- 在构造函数中设置值的私有字段
- 作为非自动属性支持字段的私有字段
- 具有上述支持字段的属性
- 汽车属性
- 没有返回某些计算或内部确定值的设置器的属性
可能还有其他一些。换句话说,几乎所有类型的字段和属性。
我想我需要保留任何表示在从文件反序列化后无法构造的对象状态的值。
我想持久化每个字段和属性不会有任何害处,但这只会使工作变慢并且文件比它需要的大。
我想我可以忽略只在类内部使用而不是从外部设置的私有字段。 我想我应该坚持那些在构造函数中设置的字段。 我不确定支持字段 - 保留它们还是保留它们的公共财产更好? 我必须坚持自动属性 我无法保留没有设置器的属性,因此我需要保留在其计算中使用的任何字段/属性。
我是在正确的轨道上还是错过了重点。
提前致谢。
【问题讨论】:
-
protobug-net- 这是故意的错字吗? -
@Henk - 不 - 相当尴尬 - 我不想让 Marc 不高兴!!我只是说对了
-
“我应该序列化哪些字段和属性?”任何你想要持久化的...
-
@mre - 很公平,但我想要一些关于哪些需要坚持的指导 8-) 我想我当然应该知道这一点。最后我想我没有足够好的测试代码来确保需要坚持的东西会回来
-
@ScruffyDuck 我会假装我没有注意到错字;p
标签: c# serialization protobuf-net