如何在Java和C#之间共享类定义

时间:2016-03-07 19:31:56

标签: java c#

我有两个合作的项目。他们是Java&分别为C#。后端是Java,前端是C#。他们正在用REST API互相交谈。由于它们是两种不同的编程语言,现在我必须为两个项目定义一些公共类,这两个项目无论如何都是多余的。

我正在寻找的是可以用作两个项目的类/结构。所有成员都是字符串或int。例如,

class Person
{
    int age;
    String name;
    String grade;
};

我的第一个偏好是像idl(文件可以在两个项目中编译)。如果不可能,在编译期间,从一种语言到另一种语言的转换也是可以接受的,因为转换是免费的,并且可以在企业代码库中使用而没有法律影响。

非常感谢!

3 个答案:

答案 0 :(得分:1)

一种可能的选择:用Java编写类,使用IKVM工具中的ikvmc为它们生成.NET代码。

答案 1 :(得分:0)

我在几个Java项目中使用了IDL,以便与用C语言编写的其他系统组件(不是C#)进行互操作。

我做了以下事情:

  1. 下载并安装JacORB(http://www.jacorb.org/
  2. 将IDL编译器( idl.bat )放在我的路径上
  3. 创建一个定义我的共享类型的IDL文件。

    module com {
    module my {
    module package {
        struct Person {
            int age;
            String name;
            String grade;
        };
    };
    };
    };
    
  4. 运行IDL编译器:idl.bat -genEnhanced -d {outputDir} {path/to/myFile.idl}

  5. 这应该为您提供文件的Java版本(Java文件可以用作您拥有的任何其他Java文件)。快速挖掘表明iiop-net 为C#提供了类似的编译器功能(同样,我没有使用C#IDL编译器,只使用Java编译器。)

答案 2 :(得分:0)

创建XSD定义并使用正确的工具(Java中的xjc,不记得.NET)在每个平台上创建对象。支持许多平台,尽管处理不同数据类型的方式存在一些细微的差异,尤其是集合,但是可以编写适用于所有内容的XSD定义。即使您不进行序列化,它也会为您提供与语言无关的定义。