Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中反序列化java序列化文件#_C#_Java_Deserialization - Fatal编程技术网

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

C# 在C语言中反序列化java序列化文件#,c#,java,deserialization,C#,Java,Deserialization,我有一个java项目,它将一些对象和int序列化到一个文件中,并使用如下函数 ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeInt(RANK_SIZE); oos.writeObject(_firstArray); oos.writeObject(_level[3]); oos.writeObject(_level[4]); ... 现在我很难用C#反序列化该文件(尝试了BinaryFormatter),因为它显然

我有一个java项目,它将一些对象和int序列化到一个文件中,并使用如下函数

ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(RANK_SIZE);
oos.writeObject(_firstArray);
oos.writeObject(_level[3]);
oos.writeObject(_level[4]);
...
现在我很难用C#反序列化该文件(尝试了
BinaryFormatter
),因为它显然只能将整个文件反序列化为单个对象(或数组,但我有不同长度的不同对象)

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


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

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


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

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


当谈到Java JSON库时,它是我个人的最爱。

IKVM可以做得很好。

我不确定Java是否有与.NET相同的二进制格式化程序。为什么不改用xml呢?好问题。我想听听人们怎么说你需要一个跨平台的序列化格式;我倾向于protobuf,但是xml、json、heck:CSV!任何与平台无关的东西都是一种语言。您的意思是框架中没有预分发的包可以做到这一点。ikvm可以在C#中实现这一点。谢谢,我在java和C#中创建了一个单独的类,用Json对它进行了序列化,反序列化没有问题。+1我只是想澄清一下,不是相反。Json是一条出路。@Ernest Friedman Hill我也是,但它确实有效。他们的测试显示使用IKVM运行Eclipse和JBoss。