我正在开发一个项目,我需要在java 6应用程序中序列化一些数据并将其反序列化为c#2.0应用程序。有没有一种策略或已存在的东西,我可以看一下,这可以让我用这两种语言做到这一点?我猜他们都支持XML序列化,但我真的需要它进行二进制序列化。
答案 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)
好处:快速,你可以在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 ...
答案 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