使用Json让Java和C#沟通的方法

原文:使用Json让Java和C#沟通的方法

最近很忙啊,新项目下来了,都没时间写博客了。频率降低点,但不能不总结跟大家分享啊。

我们在项目里经常要涉及到各模块间的通信,这其中又不可避免要碰到各类语言间之间的通信,比如之前做的一个项目里面就是Java发的消息需要C#接收,(具体消息是怎么传输的可以使用RabbitMQ等,关于RabbitMQ的使用总结可以看我之前的博客),都是面向对象的语言,而面向对象的消息怎么反解析到C#是个难题。下面就是使用Json密器让Java和C#沟通的具体办法的总结。

摘要:Json是Java和C#之间通信的利器,Java端将Java对象转变为Json串后发出,C#端接收到Json串后转换为C#对象;C#发出转变为Json串的对象,Java收到后解析成Java对象,Json串在不同语言之间起到一个桥梁的作用。对定义的Java或C#对象生成Json字串,以及从Json字串生成Java或C#对象,有很方便的方法,那就是Java下使用jackson,C#下使用Newtonsoft.Json,其中还有一些问题需要注意,如关于时间这种常见类型转换的问题,以下便是我对这方面的总结。

关键词:Json,Java,C#,jackson,Newtonsoft

前提:Java写的某种程序,C#写的某种程序。

需求:Java程序和C#程序它们之间需要交换某些信息,信息原本是用对象的形式封装的。

说明:使用jackson-all-1.9.0.jar及Newtonsoft.Json.dll。


一、Java

下面是一个简单的Java类示例,它包含了3个属性,并且提供了对象与Json串互转的两个方法。





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

publicclassNotifyRealTimeMessage implementsSerializable {   

    

    private
static ObjectMapper mapper = new
ObjectMapper();

    static
{

        SimpleDateFormat dateFormat = new
SimpleDateFormat(

                "yyyy-MM-dd HH:mm:ss");

        mapper.setDateFormat(dateFormat);

    }

        

    @JsonProperty("messageType")

    private
int type;  

    @JsonProperty("geoData")

    private
Object message;

    

    @JsonProperty("time")

    private
Calendar time;

    

    public
int getType() {

        return
type;

    }

    

    public
void setType(int
type) {

        this.type = type;

    }

    

    public
Object getMessage() {

        return
message;

    }

    

    public
void setMessage(Object message) {

        this.message = message;

    }

    

    public
Calendar getTime() {

        return
time;

    }

    

    public
void setTime(Calendar time) {

        this.time = time;

    }

    

    /**

     * 产生Json串

     *

     */

    public
String toJson() throws
JsonGenerationException,

            JsonMappingException, IOException {

        return
mapper.writeValueAsString(this);

    }

    /**

     * 从Json字符串构建NotifyRealTimeMessage对象

     *

     */

    public
static NotifyRealTimeMessage fromJson(String json) throws
JsonParseException,

            JsonMappingException, IOException {

        

        if
(json == null) {

            return
null;

        } else
{

            return
mapper

                    .readValue(json, NotifyRealTimeMessage.class);

        }

    }

}

toJson方法将NotifyRealTimeMessage对象转化为一个Json字符串,fromJson静态方法将一个Json串转化为一个NotifyRealTimeMessage对象,由于NotifyRealTimeMessage对象中包含一个时间类型的Calendar字段,故事先需要给mapper设定约定好的时间格式,mapper.SetDateFormat。这样使用它:NotifyRealTimeMessage notifyMessage = NotifyRealTimeMessage.fromJson(json);String json=notifyMessage.toJson();。

二、C#

以下是与Java类对应的C#类,它也包含了三个属性,但没提供与Json串转换的方法,注意JsonProperty标签里的名字跟Java类里的一样。





1

2

3

4

5

6

7

8

9

10

11

12

public
class RealTimeDataMsg

{

        [JsonProperty("messageType")]

        public
int MessageType { get; set; }

        [JsonProperty("geoData")]

        public
GeoData Data { get; set; }

        [JsonProperty("time")]

        public
DateTime Time { get; set; }

}

下面的是一个通用的做各类C#对象与Json字串之间转化的工具类,它使用泛型来实现,它提供了对象与Json串互转的两个方法。





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

public
static class JsonHelper

{

        private
static readonly JsonSerializerSettings MyJsonSerializerSettings;

        static
JsonHelper()

        {

           MyJsonSerializerSettings = new
JsonSerializerSettings();

           IsoDateTimeConverter dateTimeConverter = new
IsoDateTimeConverter();

           dateTimeConverter.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";

           MyJsonSerializerSettings.Converters.Add(dateTimeConverter);

        }

        public
static T FromJson<T>(string
json)

        {

            if
(string.IsNullOrEmpty(json))

            {

                return
default(T);

            }

            return
JsonConvert.DeserializeObject<T>(json, MyJsonSerializerSettings);

        }

        public
static string ToJson<T>(T data)

        {

           return
JsonConvert.SerializeObject(data, MyJsonSerializerSettings);

        }

}

在C#中,使用起来也很方便,RealTimeDataMsg realMsg = JsonHelper.FromJson<RealTimeDataMsg>(json);string json
= JsonHelper.ToJson(realMsg);。这里同样需要给MyJsonSerializerSettings设置好事先约定的时间格式:yyyy-MM-dd
HH:mm:ss,这样才能正确的解析Java生成的Json串。

这样,Java端和C#端都做好了,搞了一个新耳机,还没煲好,煲耳机去喽!

来自为知笔记(Wiz)

使用Json让Java和C#沟通的方法,布布扣,bubuko.com

时间: 2024-11-05 12:33:37

使用Json让Java和C#沟通的方法的相关文章

JSON与JAVA数据的相互转换

import net.sf.json.JSONArray;   import net.sf.json.JSONException; import net.sf.json.JSONObject;import net.sf.json.JSONSerializer; /** * json对象转换为java对象 * * @throws JSONException */ @Test public void jsonToJava(){ String json="[{\"addTime\"

org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException异常解决

org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:246) org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:178) org.apache.struts2.json.JSONWriter.p

Json与Java对象互转之Gson学习

Json与Java对象互转之Gson学习 请尊重他人的劳动成果,转载请注明出处:Json与Java对象互转之Gson学习         我曾在<XML,Object,Json转换之浅析Xstream的使用>一文中介绍过使用XStream进行XML,Object,Json之间的转换,虽然XStream内置了对Json的支持,但是效果不是特别好,毕竟XStream重点不在Json.下面就介绍另外一种工具.           Gson(又称Google Gson)是Google公司发布的一个开放

含有Date类型属性的实体类转化为JSONArray时报net.sf.json.JSONException: java.lang.reflect.InvocationTargetException

当我们通过session传递数据的时候我通常是: 直接在DAO里从数据库取出含Date类型的数据,而且通常不会将java.sql.Date转为java.util.Date. 这时候前台和后台都不会有任何问题,所以我们以为这样是正常的操作. 但是当我们用JSON传递数据的时候就会发现控制台会报一下错误信息: net.sf.json.JSONException: java.lang.reflect.InvocationTargetException 这时候我们可以再DAO里将java.sql.Dat

快速掌握Ajax-Ajax基础实例(Ajax返回Json在Java中的实现)

(转)实例二:Ajax返回Json在Java中的实现 转自http://www.cnblogs.com/lsnproj/archive/2012/02/09/2341524.html#2995114 在这篇中主要是说一下使用Json来将后台取得的数据显示到前台页面.可以说这种方法应该是实现无刷新分页的基础,而且在开发过程中经常被用到.这里的后台部分由JAVA来实现. 这个例子也在上一篇中那个项目中实现.新建一个SecondTest.html页面,定义一个按钮,并给这个按钮绑定事件ajaxJson

Json for Java API学习

首先声明:本文来个很多网友的博客,我通过参考了他们的博客,大致的了解了一些项目中常用的Json in java 类和方法,以及关于json的个人理解 个人对json的一些简单理解 在最近的学习中,查阅了很多资料,了解了一些关于json的基本知识,下面做一个简单的总结: json是什么 没有.json结尾的这种文件,json(JavaScript Object Notation)是一种简单的数据交换格式,在此之前我也不知道这个东西其实没有想象的那么抽象,看看后面的例子会更清晰 json中的数据结构

JSON 与JAVA数据的相互转换

import net.sf.json.JSONArray;import net.sf.json.JSONException;import net.sf.json.JSONObject;import net.sf.json.JSONSerializer; /** * json对象转换为java对象 * * @throws JSONException */ @Test public void jsonToJava(){ String json="[{\"addTime\":\&q

JSONObject.fromObject(map)(JSON与JAVA数据的转换)

JSON与JAVA数据的转换(JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.) 上一篇文章中有这么一句,是后台的封装数据. JSONObject jo = JSONObject.fromObject(map);常见的java代码转换成json 1. List集合转换成json代码 List list = new ArrayList(); list.add( "first" ); lis

JSON和JAVA的POJO的相互转换【转载】

该类中用用到的jar包:参加文章<使用json-lib进行Java和JSON之间的转换[转载]> import java.util.Collection; import java.util.HashMap; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /** * JSON和JAVA的POJO的相互转换 * * JSONHelper.java */ public final