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

时间:2010-01-04 18:56:55

标签: c# java serialization cross-platform

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

9 个答案:

答案 0 :(得分:17)

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

(电子格式在版本之间显然相同; API可能会有所不同)

小巧,快速,高效,portable

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

答案 1 :(得分:9)

Protocol BuffersGoogle Site

Java Tutorial

Jon Skeet's C# Port

Marc Gravell's C# Port

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

让我利用Marc的项目网站:Performance is quite acceptable ..

答案 2 :(得分:6)

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

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

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

答案 3 :(得分:4)

你可以试试Hessian:

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

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

答案 4 :(得分:3)

谷歌Protocol Buffers是你可以研究的东西。您需要检查C#实现的可用性状态,但在所有其他方面,我认为它符合您的需求。

答案 5 :(得分:3)

如果您确实需要数据为二进制文件,则可以使用BSON ...

http://bsonspec.org/implementations.html

答案 6 :(得分:1)

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

答案 7 :(得分:0)

我不相信二进制序列化会像C#一样工作,而Java也不知道彼此的本机类型。

答案 8 :(得分:0)

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