代码之家  ›  专栏  ›  技术社区  ›  Homde

使用Protobuf-net序列化对象列表

  •  3
  • Homde  · 技术社区  · 16 年前

    我一直在寻找一些二进制序列化文件和protobuf网似乎是一个良好的表现替代品。不过,我还是有点拘泥于入门。因为我想将类的定义与实际的序列化分离,所以我没有使用属性,而是选择使用.proto文件,我已经确定了对象的结构(我认为)

    message Post {
    
      required uint64 id = 1;
    
      required int32 userid = 2;
    
      required string status= 3;
    
      required datetime created = 4;
    
      optional string source= 5;
    
    }
    

    (datetime有效吗?还是应该使用记号作为int64?)

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

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

    1 回复  |  直到 16 年前
        1
  •  2
  •   Marc Gravell    16 年前

    重新 DateTime ,但我相当肯定我还没有(尚未)更新代码生成器,将其作为特例进行检测。如果你想让我试试的话,我很容易加上。。。如果您希望最大限度地提高可移植性,“ticks”风格的方法可能是实用的。让我知道。。。

    Getting Started 例如,但是请注意protobufnet希望处理它可以重构的数据; IEnumerable<T> 可能会引起问题- IList<T> 不过应该可以(默认为 List<T>

    SerializeWithLengthPrefix -然后,它甚至可以在消息边界处检测问题(在该边界处,它们作为EOF是不可检测的)。这(顾名思义)首先写入长度,因此它知道is是否有足够的数据(通过 DeserializeWithLengthPrefix