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
。
注意:如果您正在序列化 DateTime
或 TimeSpan
,最好确保您在这些成员上使用 DataFormat.WellKnown
- 它会使得它很多更容易与其他库以跨平台方式工作;但请注意,这不是数据兼容更改:它从根本上改变了这些值的存储方式,因此:如果您有现有数据,则需要考虑迁移策略。
【讨论】:
顺便说一句,profobuf-net 支持使用给定的 .proto 文件生成 C# 代码吗?谷歌工具使代码变得复杂。 @JeffreyHill 是的;最简单的方法是protogen.marcgravell.com,但同样的工具可用作独立的命令行工具、MSBuild 插件或 .NET“全局工具”以上是关于protobuf-net 使用啥基本序列化器来输出字节数组?的主要内容,如果未能解决你的问题,请参考以下文章