序列化Java对象并在C#中反序列化

时间:2016-10-24 10:09:23

标签: java c# serialization protocol-buffers xmlserializer

我正在编写一个应用程序,它需要将许多状态变量从java传递给C#。我需要为此序列化整个对象,然后以某种方式在C#中反序列化它并在C#中启动相应的对象。这可能吗?

我可以使用默认的java序列化吗?如果是,怎么样?

PS:有问题的对象来自抽象类。扩展此抽象类的类是需要序列化的类,其定义可以根据用户首选项而变化。

PPS:在被无数次重定向到谷歌开发者的页面后,我正在考虑使用WOX(主要是因为它非常“容易”使用),但它似乎已经过时了,并且最近没有新的更新数年。有没有其他选择,具有相似的易用性?

3 个答案:

答案 0 :(得分:2)

  

我可以使用默认的java序列化吗?

默认Java序列化的含义是二进制还是文本。如果它的二进制然后是No,则不能由于两个框架之间的不同二进制标准,Java(字节代码),。Net(IL)。要使它们兼容并不容易。如果它的文本像Json,Xml或者可能是自定义文本格式,那么应该很容易实现,这就是Web服务和Rest API用于在不同系统之间进行通信的内容,它们使用基于文本的序列化而不是Http作为传输协议。

网络服务 - 肥皂(Http + Xml),Json经过改装,不属于原始规格。

Rest API - Http + Json / Xml,实际上与Java脚本无缝集成

答案 1 :(得分:0)

不,您不能使用默认序列化,因为java和c#没有兼容的序列化程序。您必须两次实现该类,并使用您自己的代码在两种语言之间进行转换。

要将类实例从java移动到c#,您需要收集java类的所有属性,并使用它们来实例化一个新的c#对象。

您可以手动执行此操作或使用googles协议缓冲区等帮助程序。

编辑: protobuf的示例: Protobuf可以保存您的数据而不是您的类逻辑。它不知道面向对象的概念。抽象的java类可以这样翻译:

Javaclass:

abstract class Abs{
   int i;
}
class Real extends Abs{
   int k;
}

的Protobuf:

message Abs{
    optional int32 i = 1;
}
message Real{
    optional Abs   base = 1;
    optional int32 k    = 2;
}

答案 2 :(得分:0)

您可以将对象转换为xml,然后将xml传递给C#,然后再将xml转换为C#对象或以其他方式检索的数据。