__2017-12-16 如一模式识别研究

如一模式识别研究

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

转自:http://www.cnblogs.com/wgp13x/p/0effafd9f5283cbf36e62b4fb5e94c81.html

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

我们在项目里经常要涉及到各模块间的通信,这其中又不可避免要碰到各类语言间之间的通信,比如之前做的一个项目里面就是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(string json)

{

if (string.IsNullOrEmpty(json))

{

return default(T);

}

return JsonConvert.DeserializeObject(json, MyJsonSerializerSettings);

}

public static string ToJson(T data)

{

return JsonConvert.SerializeObject(data, MyJsonSerializerSettings);

}

}

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

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

评论留言区

:
  

作者: 游客 ; *
评论内容: *
带*号为必填项目

如一模式识别更新提示

matlab在图像处理方面的应用有更新

如一模式识别 友情链接

关于本站作者     chinaw3c     mozilla