我在c#和java跨平台的序列化方面遇到了一些问题:
我们有两个使用ServiceBus的应用程序,一个是C#应用程序,一个是JAVA应用程序。假设C#负责将数据发布到队列/主题,并订阅它。
在C#中,我们使用标准的publish方法,它允许泛型类型发布,因此它会自动序列化通过TypeA类发送的数据。
然后在java中,我们有TypeA等效代码,但是找不到任何API反序列化器,可以将对象反序列化为我们的。
有没有任何有效的JAVA反序列化程序,或者我们必须在C#中序列化(例如使用JSON),发布它并使用任何JSON反序列化程序在JAVA中反序列化?
提前感谢!
发布于 2013-04-09 23:03:53
我相信如果你不在BrokeredMessage上做任何事情,就会使用其中的一个DataContractSerializers。您没有显示任何代码,但我假设您使用的是BrokeredMessage类。如果你想跨平台,你需要控制序列化。我将序列化到JSON并将JSON作为字符串传递,或者使用流重载并可能压缩流,将其传递到构造函数中(如果它是一个大对象)。Java客户端将需要获取一个JSON反序列化程序并执行相反的操作。
正如你已经知道的-- DataContractSerializer在Java中是不容易逆转的。我相信你可以做到,但使用JSON或protobuf是一种更简单、跨平台的方式。
发布于 2013-04-09 23:02:43
对于跨语言的二进制序列化,refer to this question。然而,在这种情况下,我将使用JSON -我相信它会简单得多。
发布于 2013-04-10 08:20:23
我猜答案与您现有的代码库有关。最传统的方法是在C#上使用XmlSerializer,在Java上使用JAXB。当然,您需要手动检查两种语言的代码以确保完全的互操作性。
我认为这两种语言都支持多种序列化/反序列化方式,您只需要找到一种彼此兼容的方式即可。
https://stackoverflow.com/questions/15905247
复制相似问题