在c#中序列化Java对象和反序列化

本文关键字:对象 反序列化 Java 序列化 | 更新日期: 2023-09-27 18:14:29

我正在编写一个需要从java传递到c#的许多状态变量的应用程序。我需要为此序列化整个对象然后在c#中反序列化并在c#中初始化相应的对象。这可能吗?

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

PS:所讨论的对象来自抽象类。扩展这个抽象类的类是需要序列化的类,它的定义可以根据用户的偏好而变化。

PPS:在被无数次重定向到google开发者页面后,我正在考虑使用WOX(主要是因为它非常"容易"使用),但它似乎相当过时,并且在过去的几年里没有新的更新。有没有其他的替代方案,使用起来也很方便?

在c#中序列化Java对象和反序列化

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

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

Web Services - Soap (Http + Xml), Json被改造,不是原始规范的一部分。

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

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

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

你可以手工完成,或者使用一些辅助工具,比如google protocol-buffers。

编辑: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;
}

你可以将你的对象转换为xml,然后将xml传递给c#,然后xml又可以转换为c#对象或以其他方式检索数据