protobuf-net 使用啥基本序列化器来输出字节数组?

Posted

技术标签:

【中文标题】protobuf-net 使用啥基本序列化器来输出字节数组?【英文标题】:What base serializer does protobuf-net use to output byte array?protobuf-net 使用什么基本序列化器来输出字节数组? 【发布时间】:2019-08-30 03:13:28 【问题描述】:

protobuf-net 是否使用 BinaryFormatter 或其他格式化程序作为基本序列化器将对象序列化为 byte[],然后写入流?

添加:

我使用protobuf-net序列化数据并想在golang中反序列化,是否有任何序列化器可以在go中完成工作?

【问题讨论】:

我很确定它是一个可以自己编写的从头开始的序列化程序。来源可供您检查。如果不是这样,它只能比BinaryFormatter 慢,并且会受到同样的限制。相反,它更快并且有其自身的小限制 【参考方案1】:

Protobuf-net 是“Protocol Buffers”序列化格式的全新实现,具有惯用的 .NET API。它与BinaryFormatter 无关(尽管它可以使用 来创建自定义ISerializable 实现以供 BinaryFormatter 一起使用,如果你还在那个世界里玩的话)。

如果您想在 Go 中使用 Protocol Buffers (protobuf),只需从 this list 中选择一种 Go 实现即可。

大多数 protobuf 库都是“契约优先”的,这意味着:您需要一个 .proto 架构;要从 protobuf-net 获取它,请将 Serializer.GetProto<T>() 用作您用作根类型的 T

注意:如果您正在序列化 DateTimeTimeSpan,最好确保您在这些成员上使用 DataFormat.WellKnown - 它会使得它很多更容易与其他库以跨平台方式工作;但请注意,这不是数据兼容更改:它从根本上改变了这些值的存储方式,因此:如果您有现有数据,则需要考虑迁移策略。

【讨论】:

顺便说一句,profobuf-net 支持使用给定的 .proto 文件生成 C# 代码吗?谷歌工具使代码变得复杂。 @JeffreyHill 是的;最简单的方法是protogen.marcgravell.com,但同样的工具可用作独立的命令行工具、MSBuild 插件或 .NET“全局工具”

以上是关于protobuf-net 使用啥基本序列化器来输出字节数组?的主要内容,如果未能解决你的问题,请参考以下文章

了解 Protobuf-net 属性的序列化和反序列化

WCF Rest 服务和 protobuf-net

使用 protobuf-net 序列化具有接口类型成员的类

不支持 Protobuf-NET IExtensible 继承的解决方法

使用 protobuf-net 反序列化字典

使用 protobuf-net 反序列化 int& 类型