跨语言(java和c#)对象序列化策略
我正在做一个项目,需要序列化Java6应用程序中的一些数据,并将其反序列化为c#2.0应用程序。有没有一种策略或其他已经存在的东西可以让我用这两种语言来实现这一点?我猜它们都支持XML序列化,但我确实需要二进制序列化 我不相信二进制序列化会像C#和Java一样工作,它们彼此都不知道本地类型 () 好处:速度快,你可以打扰很多参与这件事的人,所以…-)跨语言(java和c#)对象序列化策略,c#,java,serialization,cross-platform,C#,Java,Serialization,Cross Platform,我正在做一个项目,需要序列化Java6应用程序中的一些数据,并将其反序列化为c#2.0应用程序。有没有一种策略或其他已经存在的东西可以让我用这两种语言来实现这一点?我猜它们都支持XML序列化,但我确实需要二进制序列化 我不相信二进制序列化会像C#和Java一样工作,它们彼此都不知道本地类型 () 好处:速度快,你可以打扰很多参与这件事的人,所以…-) 让我利用Marc的项目站点:…每种语言的默认二进制序列化是不兼容的,因此您将无法使用它 有许多支持Java、C#和其他语言的跨语言序列化技术
让我利用Marc的项目站点:…每种语言的默认二进制序列化是不兼容的,因此您将无法使用它 有许多支持Java、C#和其他语言的跨语言序列化技术:
其中,JSON不是二进制的,但对于基于字符串的语言来说非常有效。节约和协议缓冲区是二进制的,具有非常紧凑的表示形式。协议缓冲区是一个很好的选择。在C#端,我推荐Jon Skeet用于这个用例,因为它的两边都有相同的API(他的C#版本是Google Java版本的一个端口,是核心发行版的一部分)。如果您希望C#更“典型的.NET”,那么可能会有所帮助 (版本之间的wire格式明显相同;API可能会有所不同) 体积小、速度快、效率高 关于信息,我知道protobuf net支持.NET2.0;老实说,我还没有在Jon的版本上尝试过这一点,但我希望它会-在protobuf中,你不需要太多的3.0/3.5版本。谷歌是你可以研究的东西。您需要检查C#实现的可用性状态,但在所有其他方面,我认为它满足您的需要。您可以尝试Hessian:
是二进制的,支持java、C++和其他几种语言。我自己从来没有使用过它,但我偶然发现了它,觉得它很有趣,并将它添加到了书签中……
就谷歌协议缓冲区而言,我将在这里重复大多数其他答案。但我最终在Java端使用了一个名为protostuff的程序,而不是Google自己的Java实现,并且我还将(最外面的)类的名称作为前缀添加到协议缓冲区数据中,以使数据自描述以进行反序列化。此处的详细信息:您可以使用wox跨平台序列化库(),它基于Java和C#的本机XML序列化程序。如果您确实需要二进制数据,可以使用BSON“二进制序列化”不一定与“类型/元数据序列化”相同。许多二进制格式不依赖于任何实现中使用的类型。是的,我的目标是.NET 2.0,以及Silverlight 2+和Compact Framework 2+(IIRC-CF版本可能是3.5)。是的,就像Marc和我曾经出现在这里一样我们碰巧都看过这个问题,这纯属侥幸。