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

Java-.Net对象交换,不是基于web的,java,.net,serialization,Java,.net,Serialization,我用C#实现了一个客户机-服务器系统,客户机和服务器通过序列化/反序列化和TCP/IP通信交换.Net对象。它在本地网络上运行,而不是基于web或Internet 现在我想包括通过wifi连接的Android客户端。同样,这只是本地网络,不是通过互联网,也不是基于网络的。Android编程将使用Java。(我知道Android的Mono,但现在不想谈这个。) 在Java和.Net对象之间实现对象到对象的交换是否有一些相当简单的方法,当然前提是它们是兼容的 我看了一点JSON(Java端的Jack

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

现在我想包括通过wifi连接的Android客户端。同样,这只是本地网络,不是通过互联网,也不是基于网络的。Android编程将使用Java。(我知道Android的Mono,但现在不想谈这个。)

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

我看了一点JSON(Java端的Jackson和.Net端的JSON.Net),我猜这可能是可以做到的,但只有在对象变得相当复杂时,在每一端都重新映射东西才能做到

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


另外,我的问题与这个问题有些关联,但它从未得到合适的答案,可能是因为问题中的信息不足。此外,我不在乎最终使用的是基于JSON的传输还是XML或其他什么。

我建议使用JSON或XML(基于.xsd文件),因为它们独立于各自的实现(而不是java中的
ObjectOutputStream

在两个组件(客户机和服务器)之间使用这种格式的问题是,它们需要处于同一版本。我的最佳实践是对格式有一个底层定义(我使用xml和一个xsd文件,该文件指定xml的外观),然后使用
jaxb
生成java类。这样,您就可以在java部分中(取消)从xml封送到xml

我非常肯定.NET世界中也存在类似的情况

JSON的大小比xml小,我发现xml更具可读性。

因此,用户“默认语言环境”应该因此获得荣誉,但他/她只是通过一条评论来回答。所以,为了明确我的选择是什么,我将回答我自己的问题

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

顺便说一句,作为传输机制,我在Android端使用了一个鲜为人知的名为naga的程序。Naga似乎工作得很好,并且有很好的文档记录和示例程序,在我看来应该更为人所知

编辑:

好的,我已经让它工作到我满意的程度了。以下是我正在使用的:

Google协议缓冲区作为交换格式:

C#端Marc Gravell的protobuf网:

Java端名为protostuff的程序:

(我更喜欢protostuff,而不是官方的Google Java协议缓冲区实现,因为Google的实现基于不可变的Java对象。)


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

您也可以尝试wox(),它是一个基于XML的Java和C的跨平台序列化库。

查看这些问题:和@defaultlocale:谢谢。我完全不知道协议缓冲区。我已经在C#中对它进行了一些研究,并且非常确定这就是我将要使用的。请把它作为一个答案,我会接受的。