我可以使用 Protobuf-net 对已用 Java 序列化的数据进行反序列化吗?

Posted

技术标签:

【中文标题】我可以使用 Protobuf-net 对已用 Java 序列化的数据进行反序列化吗?【英文标题】:Can I use Protobuf-net to deserilaze data which has been serialized in Java? 【发布时间】:2014-09-16 00:49:49 【问题描述】:

我们有一个基于 Java 的 WebSocket,它当前返回 JSON,然后我们在 .Net 应用程序中使用它。由于我们收到的数据的大小,我想开始利用 Protocol Buffers 在大小/带宽方面特别提供的所有优点,以及在序列化和反序列化期间节省双方的时间/资源。

我的问题是:

如果我要求我们的 Java 团队将他们的 JSON 序列化程序替换为 Protobuf 的 Java 实现,那么我是否可以在我的 .Net 使用者中使用 Protobuf-net 来反序列化它?

换句话说,我如何确保我的 POCO 与他们的 POJO 匹配!?

[*]: 请注意,这不是关于不同 JSON 序列化程序的性能优势的问题,它特定于 Protobufs。

【问题讨论】:

【参考方案1】:

是的,绝对的。

协议缓冲区被设计为与语言无关。事实上,它们的主要用途之一是在运行不同堆栈的机器之间进行通信。

在网络上,协议缓冲区与 XML 或 JSON 没有什么不同。因为它们是独立于语言的。

要反序列化,您应该使用 Google 机器生成的代码,用于 .Net 和 Java。这将确保您的协议缓冲区正确反序列化。

【讨论】:

附带说明:使用 protobuf-net 特别是,使用机器生成的代码并不是绝对必要的 - 尽管有 .proto-to-csharp 代码生成器。

以上是关于我可以使用 Protobuf-net 对已用 Java 序列化的数据进行反序列化吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以为 Protobuf-net 设置一个全局对象工厂吗?

使用 Protobuf-net 将大数据文件流式传输为 IEnumerable

我可以为 protobuf-net WCF 使用 net.tcp 绑定吗?

使用 protobuf-net 合并 Collection 属性对象

Protobuf-net - 如何使用 oneof

使用 protobuf-net 进行质量过滤