java程序可以读取C#序列化的对象吗?

时间:2017-08-09 13:30:32

标签: java c# serialization deserialization

我正在使用java中的一个项目来替换旧的C#程序。在旧的C#程序中,用户可以将他们正在处理的数据保存到GZip文件中,通过序列化包含所有数据的包装器对象编写,并使用GZipStream编写它。

我想为用户提供加载旧系统保存的数据的选项。使用Java的GZipInputStream打开GZip文件很简单,但是如何反序列化对象呢?

我做了一些研究,发现了这个问题:Can a serialized simple java object be deserialized by C#? 那里的答案说没有库可以做到这一点,但是有关于Java如何序列化对象的文档,并且可以编写自己的代码来反序列化它们。

有没有一种已知的方法从C#到Java执行此操作?或者我应该从头开始编写自己的转换器吗?

2 个答案:

答案 0 :(得分:1)

您必须序列化JSON或XML文件中的所有内容。根本不应该在文件中存储二进制数据。然后,您可以使用任意库在Java中对其进行反序列化。

您可以使用JSON.net对其进行序列化,并使用Jackson进行反序列化。

更新:事实上,您实际上可能会编写一个SaveData类,将其编译为.dll并使其可用于Com interop。然后,有一些java第三方库可以使用dll中的SaveData类,以便它可以在java应用程序中进行互操作。然后,将此SaveData序列化为一个文件(二进制格式没问题)。但是我不确定序列化将如何在字节级上运行。当你在java端反序列化它时,你真的会得到相同的对象吗?这个解决方案可能会起作用,但它很丑陋,至少与重写c#app写入json一样“痛苦”

答案 1 :(得分:0)

您可以在jar中嵌入一个小.NET个应用程序,并使用this SO question

调用.NET应用程序

.NET应用程序会将文件反序列化为.NET个对象,然后将.NET个对象转换为xml或json。然后可以将xml / json反序列化为JVM中的等效Java对象