【问题标题】:Can a serialized simple java object be deserialized by C#?一个序列化的简单java对象可以被C#反序列化吗?
【发布时间】:2013-07-22 00:54:00
【问题描述】:

假设一个java类的所有字段都是java原语,如果这样一个对象已经被序列化了,它能否被C#成功反序列化为一个“等价”C#类的实例?

是否可以反过来 - C# 到 java?


我意识到有许多与语言无关的格式,例如可以使用完成工作的 XML。我更感兴趣的是使用native序列化数据是否可行。

【问题讨论】:

  • 不,我没试过。我想我会先问一下,以防万一这根本不可能。

标签: c# java .net serialization deserialization


【解决方案1】:

序列化流的格式可用。我认为您可以轻松编写一个类来解析字节流并在 C# 中创建所需的类。

指定序列化格式的文章: http://www.javaworld.com/community/node/2915

【讨论】:

  • 这更多的是我想知道的。我的C#知识很有限,但是如果能描述出来就可以编程了……
  • 只是字节[]遍历。您可以在link 处查看示例 java 代码以遍历序列化字节。我们修改了默认的序列化,所以我们的遍历有点不同。我们已经习惯了检测脏字段。
  • 更正式的序列化格式定义可以是found in the official Java documentation
【解决方案2】:

WOX 将有助于实现可互操作的序列化。
它可以serialize/deserializeJava/C#对象into/from标准XML(平台无关)

【讨论】:

    【解决方案3】:

    这是不可能的,至少不使用两个框架提供的本机序列化库,如this 之前的 SO 帖子中所述。

    如果你想实现跨语言序列化/反序列化,你可以求助于XML(XSTream for Java,XStream-dot-net for C#)或WOX

    WOX 是用于 Java 和 C# 对象的 XML 序列化程序。换句话说,WOX 是一个库(用于 Java 的 woxSerializer.jar 和用于 C#) 将 Java 和 C# 对象序列化为 XML 并再次返回。

    【讨论】:

    • 这是不正确的。自 Java 版本 1.1.7 起,Java 序列化格式已公开记录且稳定。假设 Java 类的所有字段都是 Java 原语,那么没有理由不能将 Java 对象反序列化为 C#,除非您必须自己实现解析器。
    【解决方案4】:

    如果您可以包含另一个依赖项,您可以考虑使用对象数据库,例如 db4o 来完成这项工作。我自己没有尝试过,但根据维基百科的文章,

    db4o 使用称为“通用反射器”的自定义功能来表示类信息,当类定义不可用时,它允许在混合 Java-.NET 环境中使用它,例如 Java 客户端 - .NET 服务器,反之亦然.

    您可以找到有关上述反射 API herehere 的更多信息。

    简而言之,这将导致您将 Java/C# 对象存储到(嵌入式)数据库(即,没有客户端/服务器架构,但通过加载包含整个数据库的单个文件)并检索之后从数据库中获取 C#/Java 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 2014-04-06
      • 1970-01-01
      • 2015-05-18
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      相关资源
      最近更新 更多