使用Json让Java和C#沟通的方法
最近很忙啊,新项目下来了,都没时间写博客了
。频率降低点,但不能不总结跟大家分享啊。
我们在项目里经常要涉及到各模块间的通信,这其中又不可避免要碰到各类语言间之间的通信,比如之前做的一个项目里面就是Java发的消息需要C#接收,(具体消息是怎么传输的可以使用RabbitMQ等,关于RabbitMQ的使用总结可以看我之前的博客),都是面向对象的语言,而面向对象的消息怎么反解析到C#是个难题
。下面就是使用Json密器让Java和C#沟通的具体办法的总结。
一、Java
|
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#
|
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#端都做好了,搞了一个新耳机,还没煲好,煲耳机去喽!
使用Json让Java和C#沟通的方法的更多相关文章
- JSONObject.fromObject(map)(JSON与JAVA数据的转换)
JSON与JAVA数据的转换(JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.) 上一篇文章中有这么 ...
- json学习系列(8)JSON与JAVA数据的相互转换实例
一.完整案例 先定义一个java实体对象,如下: package com.pcitc.json.cnblog; /** * SimInfo实体对象 * * @Description * @author ...
- JSON 与JAVA对象之间的转换(转)
JSON与XML两者目前在数据交互方面都有很高的使用率,随着现在SOA的兴起,异构系统的整合地位相应提高,本篇文章主要介绍JSON与JAVA对象之间的相互转换. 一.对普通类型的JSON模式的转换 一 ...
- net.sf.json.JSONException: java.lang.NoSuchMethodException
在尝试将json对象转换为list时候出现了如下错误 Exception in thread "main" net.sf.json.JSONException: java.lang ...
- JSON与JAVA数据的相互转换
http://www.cnblogs.com/linjiqin/archive/2011/09/19/2181408.html import net.sf.json.JSONArray; import ...
- Json字符串转换为java对象的各种实现方法【json_lib框架、Gson、org.json】
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mengzhengbin520.blog.51cto.com/7590564/12 ...
- JSON和JAVA的POJO的相互转换【转载】
该类中用用到的jar包:参加文章<使用json-lib进行Java和JSON之间的转换[转载]> import java.util.Collection; import java.util ...
- json解析异常 - net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
注:在项目中, 我使用原生的ajax请求数据的时候, JSONObject没能帮我解析, 当却不给我报错, 我是在junit单元测试中测试的时候, 发现的.发现好多时候, 特别是通过ajax请求, 不 ...
- 介绍4款json的java类库 及 其性能测试
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Lan ...
随机推荐
- HTML基本介绍
html 即 超文本标记语言 ,即标准通用标记语言下的一个应用. "超文本"就是指页面内能够包括图片.链接.甚至音乐.程序等非文字元素.超文本标记语言的结构包括"头&qu ...
- Apple Watch 1.0 开发介绍 2.1 WatchKit Apps UI要点
实现app的开始是定义storyboard场景.每个场景定义了app的一部分界面.可以为不同的尺寸自定义场景. 组装storyboard界面 WatchKit app和iOS app的布局模式不同.组 ...
- AndroidUI的组成部分ProgressBar
package com.gc.progressbar; /* * 1.ProgressBar组件也是一组重要的组件,ProgressBar本身代表了进度条组件, * 它还派生了两个经常使用的组件:Se ...
- 非常棒的Visual Studo调试插件:OzCode 2.0 下载地址
最新版下载地址 http://download.csdn.net/detail/simadi/8925511 如果你是一名C#开发者,那么,你则需要OzCode.它将可视化调试的概念上升到了一个新的高 ...
- 大约linux的几个问题,你能回答几个?--回复14-20称号
14.select和poll差异?Poll和epoll的差别? (1)select和poll的差别:(參考:http://blog.csdn.net/mituan2008/article/detail ...
- Solr/SolrCloud -error
状态 2014-08-20 10:46:22,356 INFO [coreZkRegister-1-thread-1] [org.apache.solr.cloud.ShardLeaderElecti ...
- 【翻译自mos文章】rman 备份时报:ORA-02396: exceeded maximum idle time
rman 备份时报:ORA-02396: exceeded maximum idle time 參考原文: RMAN backup faling with ORA-02396: exceeded ma ...
- 一个demo
package com.entity; /*2015-7-18*/ public class Rover { private CurrentPosition position; public Rove ...
- LeetCode——Climbing Stairs
You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...
- ruby 删除文件夹(包括文件夹中的文件夹和文件)
def deleteDirectory(dirPath) if File.directory?(dirPath) puts "是文件夹"; Dir.foreach(dirPath) ...