是否可以在C#中序列化类/对象并在java中对其进行反序列化。我想序列化类而不是任何XML / JSON数据。请澄清。
由于
答案 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。