在Java中反序列化C#Binary

时间:2013-08-16 16:18:53

标签: c# java .net serialization

我有一个系统,其中使用C#程序创建序列化文件,然后在另一个C#程序中反序列化。我想知道是否可以在Java中对C#文件进行二进制反序列化?

由于

4 个答案:

答案 0 :(得分:4)

您可以尝试使用一些具有两种平台实现的序列化器,并以平台独立格式输出数据,如Protobuf。

或者,如果您需要在Java和C#应用程序之间建立完整的RPC over network,那么您可以选择Apache Thrift。

答案 1 :(得分:3)

我假设您说的是使用BinaryFormatter序列化的对象。答案是合格的“是”,因为Java实现了图灵机。但是,这不是直截了当的。

在这种情况下,数据将采用最适合.NET运行时使用的格式,并包含有关.NET类型和程序集的信息。您必须为此格式实现自己的阅读器,然后在.NET和Java类型之间进行映射。 (Mono项目实现了与.NET兼容的BinaryFormatter,因此您可以使用their reader implementation作为参考。)

作为替代方案,请考虑使用其他格式进行数据序列化,例如JSON。这将为您提供各种语言的即时可移植性,以及方便人工检查数据的可能性。

答案 2 :(得分:1)

反序列化用C#内置的二进制序列化序列化的Java中的对象,你将在java中实现C#的反序列化逻辑。这是一个非常复杂的过程,所以让我们比较一些选项:

  1. 使用第三方库进行序列化,适用于C#和Java。

  2. 编写一个例程来序列化每个对象。一个在C#中,一个在Java中。这将是乏味的,难以维持。

  3. 用Java实现C#的序列化逻辑,反之亦然。这将是困难的,耗时的,并且你可能不会在第一次就做对。

  4. 我建议使用选项1,使用第三方库。这是我使用并强烈建议的两个第三方库。

    Google ProtoBufs

    Apache Thrift

答案 3 :(得分:0)

您可以使用任何跨平台二进制格式。您的选择包括:

  • 的Protobuf
  • BSON(Binary JSON)
  • GZIP

JSON和XML(herrrrp)也是选项,尽管是基于文本的选项。

另一个选择是对数据进行base64编码,并在另一侧进行解码;虽然你可能得到一个巨大的有效载荷,因为它是二进制的(可能不是一个好主意)。