日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

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

發(fā)布時(shí)間:2023/12/18 C# 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Json让Java和C#沟通的方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近很忙啊,新項(xiàng)目下來(lái)了,都沒(méi)時(shí)間寫(xiě)博客了。頻率降低點(diǎn),但不能不總結(jié)跟大家分享啊。

我們?cè)陧?xiàng)目里經(jīng)常要涉及到各模塊間的通信,這其中又不可避免要碰到各類語(yǔ)言間之間的通信,比如之前做的一個(gè)項(xiàng)目里面就是Java發(fā)的消息需要C#接收,(具體消息是怎么傳輸?shù)目梢允褂肦abbitMQ等,關(guān)于RabbitMQ的使用總結(jié)可以看我之前的博客),都是面向?qū)ο蟮恼Z(yǔ)言,而面向?qū)ο蟮南⒃趺捶唇馕龅紺#是個(gè)難題。下面就是使用Json密器讓Java和C#溝通的具體辦法的總結(jié)。

摘要:Json是Java和C#之間通信的利器,Java端將Java對(duì)象轉(zhuǎn)變?yōu)镴son串后發(fā)出,C#端接收到Json串后轉(zhuǎn)換為C#對(duì)象;C#發(fā)出轉(zhuǎn)變?yōu)镴son串的對(duì)象,Java收到后解析成Java對(duì)象,Json串在不同語(yǔ)言之間起到一個(gè)橋梁的作用。對(duì)定義的Java或C#對(duì)象生成Json字串,以及從Json字串生成Java或C#對(duì)象,有很方便的方法,那就是Java下使用jackson,C#下使用Newtonsoft.Json,其中還有一些問(wèn)題需要注意,如關(guān)于時(shí)間這種常見(jiàn)類型轉(zhuǎn)換的問(wèn)題,以下便是我對(duì)這方面的總結(jié) 關(guān)鍵詞:Json,Java,C#,jackson,Newtonsoft 前提:Java寫(xiě)的某種程序,C#寫(xiě)的某種程序 需求:Java程序和C#程序它們之間需要交換某些信息,信息原本是用對(duì)象的形式封裝的 說(shuō)明:使用jackson-all-1.9.0.jar及Newtonsoft.Json.dll。

一、Java

下面是一個(gè)簡(jiǎn)單的Java類示例,它包含了3個(gè)屬性,并且提供了對(duì)象與Json串互轉(zhuǎn)的兩個(gè)方法。
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; ????} ????? ????/** ?????* 產(chǎn)生Json串 ?????* ?????*/ ????public String toJson() throws JsonGenerationException, ????????????JsonMappingException, IOException { ????????return mapper.writeValueAsString(this); ????} ????/** ?????* 從Json字符串構(gòu)建NotifyRealTimeMessage對(duì)象 ?????* ?????*/ ????public static NotifyRealTimeMessage fromJson(String json) throws JsonParseException, ????????????JsonMappingException, IOException { ????????? ????????if (json == null) { ????????????return null; ????????} else { ????????????return mapper ????????????????????.readValue(json, NotifyRealTimeMessage.class); ????????} ????} }

toJson方法將NotifyRealTimeMessage對(duì)象轉(zhuǎn)化為一個(gè)Json字符串,fromJson靜態(tài)方法將一個(gè)Json串轉(zhuǎn)化為一個(gè)NotifyRealTimeMessage對(duì)象,由于NotifyRealTimeMessage對(duì)象中包含一個(gè)時(shí)間類型的Calendar字段,故事先需要給mapper設(shè)定約定好的時(shí)間格式,mapper.SetDateFormat。這樣使用它:NotifyRealTimeMessage?notifyMessage?=?NotifyRealTimeMessage.fromJson(json);String?json=notifyMessage.toJson();。

?

二、C#

以下是與Java類對(duì)應(yīng)的C#類,它也包含了三個(gè)屬性,但沒(méi)提供與Json串轉(zhuǎn)換的方法,注意JsonProperty標(biāo)簽里的名字跟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; } }
下面的是一個(gè)通用的做各類C#對(duì)象與Json字串之間轉(zhuǎn)化的工具類,它使用泛型來(lái)實(shí)現(xiàn),它提供了對(duì)象與Json串互轉(zhuǎn)的兩個(gè)方法。
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#中,使用起來(lái)也很方便,RealTimeDataMsg?realMsg?=?JsonHelper.FromJson<RealTimeDataMsg>(json);string?json =?JsonHelper.ToJson(realMsg);這里同樣需要給MyJsonSerializerSettings設(shè)置好事先約定的時(shí)間格式:yyyy-MM-dd HH:mm:ss,這樣才能正確的解析Java生成的Json串。

這樣,Java端和C#端都做好了,搞了一個(gè)新耳機(jī),還沒(méi)煲好,煲耳機(jī)去嘍!

?

?

?



來(lái)自為知筆記(Wiz)



轉(zhuǎn)載于:https://www.cnblogs.com/wgp13x/p/0effafd9f5283cbf36e62b4fb5e94c81.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的使用Json让Java和C#沟通的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。