【问题标题】:Deserializing a java serialized file in C#在 C# 中反序列化 java 序列化文件
【发布时间】:2011-08-24 22:55:08
【问题描述】:

我有一个 java 项目,它可以将一些对象和整数序列化到一个文件中,其功能如下:

ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(RANK_SIZE);
oos.writeObject(_firstArray);
oos.writeObject(_level[3]);
oos.writeObject(_level[4]);
...

现在我无法使用 C# 反序列化该文件(尝试了 BinaryFormatter),因为它显然只能将整个文件反序列化为单个对象(或数组,但我有不同长度的不同对象)。

我首先尝试将这些文件的生成移植到 C#,但惨遭失败。这些文件很小,我不必必须自己生成它们。

我是否需要更改这些文件在 Java 中的生成方式,或者我可以以任何方式对其进行反序列化?

【问题讨论】:

  • 我不确定 java 是否具有与 .NET 相同的二进制格式化程序。你为什么不使用xml呢?总之是个好问题。我想听听人们怎么说
  • 你需要一个跨平台的序列化格式;我倾向于 protobuf,但是 xml、json、哎呀:CSV!任何与平台无关的东西

标签: c# java deserialization


【解决方案1】:

标准 .NET 框架中没有任何东西知道如何反序列化 Java 对象。理论上,您可以使用 Java 序列化规范并用 C# 编写自己的反序列化代码。但这将是一个庞大而复杂的项目,我认为您不会发现很多客户对使用它感兴趣。

更改序列化数据的方式以使用可移植格式(JSON 或某种形式的 XML)要容易得多。有 Java 和 C# 库来处理这些格式,总的工作量会少几个数量级。我非常喜欢第二种方法。

【讨论】:

  • C# 是一门语言。你的意思是框架中没有预分发的包可以做到这一点。 ikvm 可以在 C# 中完成
  • 谢谢,我在 java 和 c# 中创建了一个单独的类,用 Json 对其进行序列化,反序列化没有问题。
  • +1 我只是想澄清一下,不要相反。 Json 是要走的路。
【解决方案2】:

也许乍一看违反直觉的解决方案可能是将它们序列化为一些通常可以理解的格式,例如 JSON?我什至不确定Java中序列化对象的二进制格式是否保证在Java版本之间保持不变......

Jackson 是我个人最喜欢的 Java JSON 库。

【讨论】:

    【解决方案3】:

    http://www.ikvm.net/IKVM 可以完美做到。

    【讨论】:

    • @Ernest Friedman-Hill 我也是,但它确实有效。他们的测试显示使用 IKVM 运行 Eclipse 和 JBoss。
    猜你喜欢
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2013-01-08
    相关资源
    最近更新 更多