小编典典

Java-.Net对象交换,不是基于Web的

java

我有一个用C#实现的客户端-服务器系统,客户端和服务器通过序列化/反序列化并通过TCP /
IP进行通信来交换.Net对象。它在本地网络上运行,而不是基于Web或Internet的。

现在,我想包括通过wifi连接的Android客户端。同样,这仅是本地网络,不通过Internet也不基于Web。Android编程将使用Java。(我知道Android版Mono,但现在不建议加入。)

是否存在一些相当简单的方法来实现Java和.Net对象之间的对象到对象的交换,当然,前提是它们是兼容的?

我对JSON有所了解(Java端是Jackson,.Net端是Json.Net),我猜它可能可以实现,但是只有在尽最大努力在每一端重新映射事物的情况下对象变得相当复杂。

还有其他建议吗?基于JSON还是其他方式?

PS。我的问题与这个用于将Java的JSON转换为C#或从C#转换Java的Mapping工具有关,但它可能没有得到合适的答案,这可能是因为问题中的信息不足。另外,我不在乎是否最终使用基于JSON的传输或XML或其他方式。


阅读 198

收藏
2020-11-30

共1个答案

小编典典

SO用户“默认语言环境”应该为此感到荣幸,但是他/她只是通过评论来回答。因此,为了清楚说明我的选择,我将回答自己的问题。

我已经决定使用Google协议缓冲区,我认为它比JSON对在Java和.Net之间来回移动对象提供了更好的支持。因为我在C#方面有丰富的经验,并且有很多现有的C#定义的类,所以我选择了.net端的Marc
Gravell的protobuf-net程序,以及Google自己对Android端的支持(看不到编辑)
。这意味着我是在C#中定义对象,而不是在.proto文件中定义-protobuf-net生成.proto文件,然后从中生成Java代码。

顺便说一句,作为传输机制,我在Android端使用了一个鲜为人知的程序naga。http://code.google.com/p/naga/
Naga似乎工作正常,并且文档齐全,并具有示例程序,在我看来,应该更知名。

编辑:

好的,我已经满意了。这是我正在使用的:

Google协议缓冲区作为交换格式:https :
//developers.google.com/protocol-
buffers/

Marc Gravell在C#端的protobuf-net:http :
//code.google.com/p/protobuf-net/

Java端称为protostuff的程序:http :
//code.google.com/p/protostuff/

(由于Google的实现基于不可变的Java对象,因此我更喜欢使用Proststuff而非协议缓冲区的官方Google Java实现。)

实际上,我没有使用纯协议缓冲区作为交换格式-我为数据加上了要传输的(最外部)类的名称。这使得数据可以在另一端自识别以进行反序列化。

2020-11-30