C# 使用Protobuf net序列化对象列表

C# 使用Protobuf net序列化对象列表,c#,protocol-buffers,protobuf-net,C#,Protocol Buffers,Protobuf Net,我一直在寻找对文件进行二进制序列化的方法,protobuf net似乎是一个性能良好的替代方案。不过,我还是有点难以开始。因为我想将类的定义与实际的序列化分离,所以我没有使用属性,而是选择使用.proto文件,我已经搞定了对象的结构(我想) (datetime是否有效,或者我是否应使用记号作为int64?) 但我一直在研究如何使用protogen,然后将Post的IEnumerable序列化到一个文件中,并将其读回。任何帮助都将不胜感激 另一个相关的问题是,是否有检测损坏的二进制文件的最佳做法,

我一直在寻找对文件进行二进制序列化的方法,protobuf net似乎是一个性能良好的替代方案。不过,我还是有点难以开始。因为我想将类的定义与实际的序列化分离,所以我没有使用属性,而是选择使用.proto文件,我已经搞定了对象的结构(我想)

(datetime是否有效,或者我是否应使用记号作为int64?)

但我一直在研究如何使用protogen,然后将Post的IEnumerable序列化到一个文件中,并将其读回。任何帮助都将不胜感激


另一个相关的问题是,是否有检测损坏的二进制文件的最佳做法,例如在序列化时关闭计算机

Re
DateTime
。。。这不是标准的原型;我已经在我自己的库中添加了一个BCL.DateTime(或类似的),目的是匹配protobuf net用于
DateTime
的内部序列化,但我相当确定我还没有(尚未)更新代码生成器来检测这一特殊情况。如果你想让我试试的话,那就很容易添加。。。如果您想要最大的可移植性,“滴答声”风格的方法可能是实用的。让我知道

重新序列化为一个文件-如果应该与示例大致相同,但请注意protobuf net希望处理它可以重建的数据;只是
IEnumerable
可能会导致问题-
IList
应该可以,但是(重建时,它将默认为
List
作为具体类型)


重新损坏-可能使用
SerializeWithLengthPrefix
-然后它甚至可以在消息边界处检测问题(在该边界处,它们作为EOF无法检测)。这(顾名思义)首先写入长度,因此它知道is是否有足够的数据(通过
反序列化WithLengthPrefix
)。或者,为哈希/校验和保留文件中的前[n]个字节。写这个空格,然后是数据,计算散列/校验和并覆盖开始。在反序列化过程中进行验证。更多的工作。

嗨,Mattias,这里没有批评的意思,但我很好奇,为什么你会在这里问这个问题,而不是在相当活跃的协议缓冲区论坛上问:?@BillW-这里很好,当然?这是一个编程问题,作者在这里相当活跃,我相信…嗨,马克,谢谢你的回答。我想知道的是关于Post列表的.proto文件声明(而不是属性),以及如何使用protogen和生成的类。。。我还没有看到任何这样的例子,嗯,也许我可以把一个带有某个值的虚拟帖子始终放在文件的最后,如果没有,就返回到最后一次备份
message Post {

  required uint64 id = 1;

  required int32 userid = 2;

  required string status= 3;

  required datetime created = 4;

  optional string source= 5;

}