C#中的序列化和Java中的反序列化

时间:2013-07-31 18:26:05

标签: c# java serialization deserialization

是否可以在C#中序列化类/对象并在java中对其进行反序列化。我想序列化类而不是任何XML / JSON数据。请澄清。

由于

6 个答案:

答案 0 :(得分:5)

我在这里看到3个选项。我建议选项1,Protobufs。

查看Google的ProtoBufs

或某些等价物。这是java version.这里是C# port.

Protobufs意味着这种语言互操作。它的二进制,小型,快速和语言无关。

它还具有向后兼容性,因此如果您将来更改序列化对象,您仍然可以阅读它们。此功能对您来说也是透明的,只要您编写代码,了解在反序列化的旧对象时可能会丢失较新的变量。这是一个巨大的优势!

在另一个

中实现一种语言的默认序列化

您可以尝试在C#中实现java序列化逻辑,或者在Java中实现C#序列化例程。我不建议这样做,因为当你编写新代码时会更加困难,更冗长,几乎肯定会更慢,并且会给你带来相同的结果。

手动编写序列化例程

这肯定会很快,但很乏味,更容易出错,难以维护,灵活性较低......

对于像ProtoBufs这样的库,

Here's some benchmarks。这应该有助于您为您的用例选择最佳的一个。

答案 1 :(得分:1)

我们前一段时间做了这个,它经过大量的修补后工作,它真的取决于字节编码,我认为JAva使用一个而C#使用另一个(小端与大端),所以你需要实现一个解串器考虑到这种影响。希望这有帮助

答案 2 :(得分:1)

正如其他人所建议的那样,您的选择将是外部序列化库(Google Protobuff,Apache Thrift等),或者只是使用内置速度较慢/效率较低的内容(JSON,XML,等等)。你也可以写自己的,但相信我,这是一个维护的噩梦。

答案 3 :(得分:0)

不使用本机序列化。内置默认值与数据类型的二进制表示相关联,这对于不同的VM是不同的。 XML,JSON和类似技术的目的正是为了提供一种通用的格式,并且可以在不同的系统之间移动。对于它的价值,序列化为JSON的开销通常很小,并且能够手动读取序列化对象有很多好处,所以我建议使用JSON,除非你有一个非常具体的理由,为什么你不能。

答案 4 :(得分:0)

考虑OMG的标准CORBA IIOP。

虽然你们很多人不需要CORBA的全面“远程对象”支持,但IIOP是跨越线路“移动语言中立对象”(例如对象值参数)的基础二进制协议。

  • 对于Java:Java EE EJB基于IIOP,有RMI-IIOP;各种支持库。 IDL-to-Java compiler随JDK一起提供。

  • 对于C#IIOP&与Java EE集成,请参阅IIOP.NET

答案 5 :(得分:0)

您还可以考虑MongoDB使用的BSON。 如果您的C#/ Java程序可以与mongodb数据库通信,则可以将对象存储在那里并使用适当的驱动程序进行读取。

关于BSON本身,请参阅mongoDB博客上的BSON and Data Interchange