在C#中反序列化java序列化文件

时间:2011-08-24 22:55:08

标签: c# java deserialization

我有一个java项目,它将一些对象和ints序列化为一个具有

等功能的文件
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(RANK_SIZE);
oos.writeObject(_firstArray);
oos.writeObject(_level[3]);
oos.writeObject(_level[4]);
...

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

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

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

3 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:3)

http://www.ikvm.net/ IKVM可以完美地完成它。