3

是否可以在 C# 中序列化类/对象并在 java 中反序列化。我想序列化类而不是任何 XML/JSON 数据。请说清楚。

谢谢

4

6 回答 6

5

我在这里看到 3 个选项。我建议选项 1,Protobufs。

查看 Google 的 ProtoBufs

或一些等价物。这是java版本。 这是一个C# 端口。

Protobufs 意味着这种语言互操作。它的二进制、小型、快速且与语言无关。

它还具有向后兼容性,因此如果您将来更改序列化对象,您仍然可以读取它们。这个特性对你来说也是透明的,只要你编写代码理解新变量在非序列化旧对象时可能会丢失。这是一个巨大的优势!

在另一种语言中实现一种语言的默认序列化

您可以尝试在 C# 中实现 java 序列化逻辑,或在 Java 中实现 C# 序列化例程。我不建议这样做,因为它会更困难,更冗长,几乎肯定会在您编写新代码时变慢,并且会给您带来相同的结果。

手动编写序列化例程

这肯定会很快,但很乏味,更容易出错,更难维护,更不灵活......

以下是ProtoBufs 等库的一些基准测试。这应该有助于您为您的用例选择最佳的。

于 2013-07-31T18:27:42.477 回答
1

我们前段时间做了这个,经过大量修改后它工作了,它真的取决于字节编码,我认为 JAva 使用一个而 C# 使用另一个(小端与大端),所以你需要实现一个反序列化器来影响这个考虑到。希望这可以帮助

于 2013-07-31T18:29:55.190 回答
1

正如其他人所建议的那样,您的选择将是外部序列化库(Google Protobuff、Apache Thrift等),或者只是使用带宽方面较慢/效率较低的内置工具(JSON、XML 等)。你也可以自己写,但相信我,这是维护的噩梦。

于 2013-07-31T18:57:02.590 回答
0

不使用本机序列化。内置默认值与数据类型的二进制表示相关联,不同 VM 的二进制表示不同。XML、JSON 和类似技术的目的正是提供一种通用格式,并且可以在不同系统之间移动。对于它的价值,序列化为 JSON 的开销通常很小,并且能够手动读取序列化对象有很多好处,所以我推荐 JSON,除非你有一个非常具体的原因你不能。

于 2013-07-31T18:35:54.987 回答
0

考虑 OMG 的标准 CORBA IIOP。

虽然很多人不需要 CORBA 的全面“远程对象”支持,但 IIOP 是用于通过网络“移动与语言无关的对象”(例如对象值参数)的底层二进制协议。

  • 对于 Java:Java EE EJB 基于 IIOP,有 RMI-IIOP;各种支持库。IDL-to-Java 编译器随JDK 一起提供。

  • 有关 C# IIOP 和与 Java EE 的集成,请参阅IIOP.NET

于 2013-07-31T18:40:48.983 回答
0

您还可以考虑MongoDB 使用的BSON。如果您的 C#/Java 程序可以与 mongodb 数据库通信,则可以将对象存储在那里并使用适当的驱动程序读取它。

关于 BSON 本身,请参阅mongoDB 博客上的BSON 和数据交换

于 2013-07-31T20:10:14.847 回答