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

简介: 原文:使用Json让Java和C#沟通的方法最近很忙啊,新项目下来了,都没时间写博客了。频率降低点,但不能不总结跟大家分享啊。 我们在项目里经常要涉及到各模块间的通信,这其中又不可避免要碰到各类语言间之间的通信,比如之前做的一个项目里面就是Java发的消息需要C#接收,(具体消息是怎么传输的可以使用RabbitMQ等,关于RabbitMQ的使用总结可以看我之前的博客),都是面向对象的语言,而面向对象的消息怎么反解析到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
public class NotifyRealTimeMessage implements Serializable {   
     
     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#端都做好了,搞了一个新耳机,还没煲好,煲耳机去喽!

 

 

 





目录
相关文章
|
6天前
|
开发框架 .NET 程序员
C# 去掉字符串最后一个字符的 4 种方法
在实际业务中,我们经常会遇到在循环中拼接字符串的场景,循环结束之后拼接得到的字符串的最后一个字符往往需要去掉,看看 C# 提供了哪4种方法可以高效去掉字符串的最后一个字符
|
9天前
|
XML JSON 数据处理
C# 中的 XML 与 JSON 数据处理
在现代软件开发中,数据交换和存储需求日益增长,XML 和 JSON 成为最常用的数据格式。本文从 C# 角度出发,详细介绍如何处理这两种格式,并提供示例代码。对于 XML,我们介绍了读取、创建和写入 XML 文件的方法;对于 JSON,则展示了如何使用 Newtonsoft.Json 库进行数据解析和序列化。此外,文章还总结了常见问题及其解决方案,帮助开发者更好地应对实际项目中的挑战。
156 61
C# 中的 XML 与 JSON 数据处理
|
9天前
|
Java
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
本文介绍了Java中抽象类和抽象方法的使用,以及ArrayList的基本操作,包括添加、获取、删除元素和判断列表是否为空。
13 2
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
|
5天前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
16 4
|
3天前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
8 1
|
7天前
|
安全 Java API
Java根据URL获取文件内容的实现方法
此示例展示了如何安全、有效地根据URL获取文件内容。它不仅展现了处理网络资源的基本技巧,还体现了良好的异常处理实践。在实际开发中,根据项目需求,你可能还需要添加额外的功能,如设置连接超时、处理HTTP响应码等。
37 4
|
6天前
|
JSON Java fastjson
java小工具util系列3:JSON和实体类转换工具
java小工具util系列3:JSON和实体类转换工具
11 2
|
9天前
|
安全 Java
java调用方法
java调用方法
18 4
|
6天前
|
XML JSON JavaScript
JSON对象的stringify()和parse()方法使用
本文阐述了JSON对象的`stringify()`和`parse()`方法的用法,包括如何将JavaScript对象转换为JSON字符串,以及如何将JSON字符串解析回JavaScript对象,并讨论了转换过程中需要注意的事项。
JSON对象的stringify()和parse()方法使用
|
9天前
|
Java 索引
java基础扫盲-String类常用的方法
java基础扫盲-String类常用的方法
下一篇
无影云桌面