平台无关的Java <-> C#互操作性

斯蒂芬·哈特勒

我们想在Java项目中使用现有的C#源代码。到目前为止,这并不是一个大问题,因为使用Java Native Interface(JNI)非常简单。问题是该软件还应在非Windows操作系统上运行。因此,我们可以使用Mono编译C#源代码,以使其在Linux等操作系统上可执行。但是Java中的集成如何?JNI或任何基于COM的C#<-> Java互操作性解决方案均取决于OS,并且仅在Windows上有效。

一种可能的解决方案是实现Web服务。还有其他人如何解决这个问题的想法吗?我将非常感谢其他建议!

非常感谢!

问候

伦妮·皮特

这样可能不是一个“答案”,更多的是关于我如何看待类似(我认为)情况的讨论。

我对基于C#/。Net的客户端-服务器样式系统进行了重大投资。因此,当我决定也要支持Android“客户端”应用程序时,我研究了各种选项。对我而言,最重要的因素是将C#类保留为现有系统和要编写的Java Android应用程序之间的对象交换的定义类。

我最终选择并调整了自己的爱好,是使用Google协议缓冲区作为交换媒体的系统。(如果您不熟悉它们,它们是一种类似于JSON的交换格式。)https://developers.google.com/protocol-buffers/

在.Net端,我使用Marc Gravell编写的ProtoBuf-Net(我相信他在SO工作)。它具有获取.Net对象并生成.proto文件(协议缓冲区的定义文件)的能力。https://code.google.com/p/protobuf-net/

在Android端,我使用David Yu编写的ProtoStuff。他的代码中有一部分使用.proto文件并生成相应的Java类。https://code.google.com/p/protostuff/

我遇到的一个问题是,对于大多数派生类的.Net类而言,这不能很好地工作。我创建了一个变通方法,该注释在我对此处答案的评论中进行了描述:如何使protobuf-net展平和展平.Net中的继承类?

现在这使我满意。

请注意,我完全没有谈到Android应用程序如何连接到基于Windows的系统以及如何进行通信。这对我来说是次要的-我的主要考虑是使C#类定义成为确定的定义,并从它们自动创建Java类,然后进行对象到对象的交换。(如果我使用的是自制的TCP / IP通信链接,但实际的通信可以是任何东西,可能还包括Web服务。)

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

FHIR互操作性平台选择

来自分类Dev

Scala有序/ Java可比互操作性

来自分类Dev

Scala有序/ Java可比的互操作性

来自分类Dev

Adobe After Effects的C#互操作性

来自分类Dev

Java互操作性因Scala泛型和装箱而陷入困境

来自分类Dev

Common-Lisp / Java互操作性有哪些可能的方法?

来自分类Dev

在Frege中与Java的互操作性,尤其是在IO Monad中

来自分类Dev

Common-Lisp / Java互操作性有哪些可能的方法?

来自分类Dev

Ceylon和Java之间的互操作性:如何共享“ ceylon.language”的导入

来自分类Dev

无需附加程序包的C / C ++ / java平台无关代码

来自分类Dev

Swift数组与C的互操作性?

来自分类Dev

与Swift的C互操作性

来自分类Dev

C ++和Fortran互操作性

来自分类Dev

与平台无关的c位域存储

来自分类Dev

C ++和C#与Crypto之间的加密互操作性

来自分类Dev

C ++和C#与Crypto之间的加密互操作性

来自分类Dev

C和C ++中类型的互操作性

来自分类Dev

struct作为基类-C / C ++互操作性

来自分类Dev

C和C ++中类型的互操作性

来自分类Dev

GNU Fortran和C的互操作性

来自分类Dev

Boost与C ++ 11之间的互操作性

来自分类Dev

QML和C ++图像互操作性

来自分类Dev

C可变参数函数与Fortran的互操作性

来自分类Dev

Objective-C Swift与Realm的互操作性

来自分类Dev

Fortran-C互操作性基本示例

来自分类Dev

Boost与C ++ 11之间的互操作性

来自分类Dev

Objective-C Swift与Realm的互操作性

来自分类Dev

语言/平台/与构建无关的依赖性管理器

来自分类Dev

C#/ F#互操作性:不能在F#代码中使用C#类型