我有一个用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或其他方式。
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实现。)
实际上,我没有使用纯协议缓冲区作为交换格式-我为数据加上了要传输的(最外部)类的名称。这使得数据可以在另一端自识别以进行反序列化。
我想基于输入参数同步一个方法或一个块。 因此,我有一个API,它在post有效负载中有两个长类型的输入(比如id1和id2),可以是原始的,也可以是包装的),可以是JSON。这个API将被多个线程同时或随机地在不同时间调用。 现在如果第一个API调用有ID1=1和ID2=1,同时另一个API调用有ID1=1和ID2=1,它应该等待第一个API调用处理完毕后再执行第二个调用。如果第二个API调用具有
问题内容: 我有Java swing应用程序。我想转换为基于Web的应用程序。最简单的方法是什么?有没有可用的工具,最好是开放源代码? 问题答案: AjaxSwing是一种运行时工具,需要用于商业用途的服务器许可证。 您可能要尝试Mia Transformer-该网站的部分内容为法语-。他们将Swing Java代码更改为GWT Java代码,然后GWT将其更改为Javascript,然后,如果您
我们有一个包含数百个类/枚举的大型应用程序,我们希望使用MongoDB来存储其中的一些。 目前的情况是,我们有一个二进制序列化的系统。NET对象转换为SQL数据库中的字段,然后按需反序列化。我们想要的是以一种允许我们直接查询对象属性的方式将对象放入Mongo(即,不必将对象加载到内存、反序列化等)。这样我们就可以从历史数据中获得一些分析,而无需大幅更改代码库。 我的问题是,这很容易实现吗?C#驱动
我在我的phorum服务器中遇到了一个奇怪的错误--似乎是随机的,一些用户将相互交换,并发现他们作为另一个人完全登录,可以完全访问另一个人的帐户。我自己也经历过一次这个bug,但不能重新创建它。 Phorum被配置为通过cookie跟踪会话,会话散列也存储在用户数据库中。我已经确认数据库完好无损,没有会话ID冲突发生。 您可以在这里看到Phorum的身份验证和会话管理的源代码,它相当简单。会话只能
问题内容: 我正在一个JavaScript项目上,只是想知道为什么对象实例不继承和其他方法,而不必调用超类(superobject?)方法。 我看过了MDN文档,实际上有“非标准”属性方法。 但这些已被弃用。为什么要转向方法? 在我看来,类似的东西比更好。对于其他一些Object方法,我也会说同样的话。 问题答案: 这是为了避免发生冲突-通常情况下,对象的问题不具有所需值的属性。 JS中的对象通常
请建议更好的方法将路线转换为路线地图。