跨语言(java和c#)对象序列化的策略

我正在开发一个项目,我需要在java 6应用程序中序列化一些数据并将其反序列化为ac#2.0 app。 有没有一种策略或已经存在的东西,我可以看一下这会让我用这两种语言做到这一点? 我猜它们都支持XML序列化,但我真的需要它进行二进制序列化。

协议缓冲区在这里是一个很好的选择。 在C#方面,我会推荐Jon Skeet的dotnet-protobufs用于此用例,因为它在两端都有相同的API(他的C#版本是Google Java版本的端口,是核心发行版的一部分)。 如果你希望C#更“典型的.NET”,那么protobuf-net可能有所帮助。

(版本之间的电线格式明显相同; API可能会有所不同)

小巧,快速,高效, 便携 。

有关信息,我知道 protobuf-net支持.NET 2.0; 老实说我没有在Jon的版本上试过这个,但我希望它会 – 在protobuf中你需要3.0 / 3.5并不多。

协议缓冲区 ( 谷歌网站 )

Java教程

Jon Skeet的C#Port

Marc Gravell的C#Port

好处:快速,你可以在SO上发现一些涉及这件事的人。;-)

让我利用Marc的项目网站: 性能是完全可以接受的 ..

每种语言的默认二进制序列化是不兼容的,因此您将无法使用它。

有许多支持Java,C#和其他语言的跨语言序列化技术:

  • JSON
  • 节约
  • 协议缓冲区

其中,JSON不是二进制文件,但对于基于字符串的语言非常有效。 Thrift和Protocol Buffers是二进制的,具有非常紧凑的表示。

你可以试试Hessian:

http://hessian.caucho.com/index.xtp

它是二进制的,支持Java,C ++和其他几种语言。 我自己从未使用它,但遇到它,认为它很有趣,并为它添加了书签……

谷歌的协议缓冲区是你可以研究的东西。 您需要检查C#实现的可用性状态,但在所有其他方面,我认为它满足您的需求。

如果你确实需要二进制数据,你可以使用BSON …

http://bsonspec.org/implementations.html

您可以使用wox跨平台序列化库( https://github.com/codelion/wox ),它基于Java和C#的原生XML序列化程序。

我不认为二进制序列化将作为C#工作,Java不知道彼此本机类型。

就Google协议缓冲区而言,我将在此回应大多数其他答案。 但我最终在Java端使用了一个名为protostuff的程序,而不是谷歌自己的Java实现,我还添加了(最外层)类的名称作为协议缓冲区数据的前缀,以使数据自我描述以进行反序列化。 详情请访问: https : //stackoverflow.com/a/17923846/253938