Json串與List、Bean之間的轉換,處理類中List屬性的序列化問題
在UDP通訊協議中,伺服器和客戶端之間通過用DatagramPacket構建資料包進行通訊,在傳送資料包之前,需要對封裝好的訊息物件進行序列化,使其成為Byte型別,而在Java中,只有實現了Serializable介面的類才能實現序列化,但是在學習過程中遇到一個問題,就是當實現了Serializable介面的類中有List<T>屬性時,那麼在對這個類進行序列化時,List<T>
不會被序列化,網上說,List本身就是一個介面,沒有實現Serializable這一說,所以不能被序列化,於是用Gson類處理
1、Json串與List<Bean>轉換
先將List<bean>解析成Json串,然後對Json串進行序列化,具體程式碼如下:
List<Member> list=new ArrayList<>(); //定義List
Member m1=new Member("zhangsan",1001);
Member m2=new Member("lisi",1002);
list.add(m1);
list.add(m2);
Gson gson=new Gson();
String jsonString=gson.toJson(list); //轉化成json串
Message backMsg=new Message();//Message實現了Serializable介面
backMsg.setType("M_RANKED");
backMsg.setJsonString(jsonString);
byte[] buf=Translate.ObjectToByte(backMsg);//序列化
接受的時候先將Message反序列化,然後在獲取Json串,並賦給List<Bean>,具體程式碼如下:
byte[] buf=new byte[8096];
//構建接受資料包
DatagramPacket backPacket=new DatagramPacket(buf,buf.length);//構建登入資料包
//接受資料包
clientSocket.receive(backPacket);
Message backMsg=(Message)Translate.ByteToObject(buf); //反序列化
Gson gson=new Gson();
//解析Json串並賦給List<Bean>
List<Member> list=gson.fromJson(backMsg.getJsonString(), new TypeToken<List<Member>>(){}.getType());
Bean-->Json
Member bean=new Member();
bean.setUserName("lisi");
bean.setScore(100);
bean.setLevel("學神-");
Gson gson=new Gson();
String jsonString=gson.toJson(bean); //將Bean轉化為Json串
Gson gson=new Gson();
Member bean=gson.fromJson(msg.getJsonString(),Member.class);//將json串轉化為bean
另貼上序列化類Translate
public class Translate {
//物件反序列化
public static Object ByteToObject(byte[] bytes) {
Object obj=null;
try {
ByteArrayInputStream bi=new ByteArrayInputStream(bytes); //位元組陣列輸入流
ObjectInputStream oi=new ObjectInputStream(bi); //物件輸入流
obj=oi.readObject(); //轉為物件
}catch(Exception ex) { }
return obj;
}
//物件序列化
public static byte[] ObjectToByte(Object obj) {
byte[] bytes=null;
try {
ByteArrayOutputStream bo=new ByteArrayOutputStream(); //位元組陣列輸出流
ObjectOutputStream oo=new ObjectOutputStream(bo); //物件輸出流
oo.writeObject(obj); //輸出物件
bytes=bo.toByteArray(); //物件序列化
}catch(IOException ex) {}
return bytes;
}
}
相關文章
- 簡單易用的JSON與List相互轉換JSON
- json字串與Object、List、Map的互轉工具類JSON字串Object
- asp.net中DataTable和List之間相互轉換ASP.NET
- list與字串轉換字串
- 開發:隨筆記錄之 Json字串 與 List、HashMap物件的轉換筆記JSON字串HashMap物件
- 轉:java中陣列與List相互轉換的方法Java陣列
- 父類和子類之間的轉換問題
- FastJson bean序列化屬性順序問題ASTJSONBean
- java的兩個bean之間複製屬性,所有屬性中替換某幾個字元JavaBean字元
- 將json字串轉換成list<T>JSON字串
- DataTable與List相互轉換
- java json字串轉換為物件,轉換為listJavaJSON字串物件
- 更為簡單的JsonString資料與Map,List之間的轉換JSON
- List和ObservableCollection的轉換
- java中list的常見問題。Java
- 解決巢狀list型別的JSONObject/JSONArray轉換成原來list問題。巢狀型別JSONObject
- Python List 列表的處理Python
- 記錄一次Array轉換為List遇到的問題
- c#中Array,ArrayList 與List<T>的區別、共性與轉換C#
- List 和 陣列 的轉換陣列
- Hql總結 查詢結果動態組裝成List(map),List(bean),List(list),List(set)等格式(轉)Bean
- Struts中ActionForm Bean和valueObject之間的問題ORMBeanObject
- Java 中陣列轉換為 ListJava陣列
- 請教Golang處理Json, 處理的是 List of Json這種情況,大家有何高見?GolangJSON
- list-style-image屬性用法
- List-style-type屬性失效
- list集合按元素的某一屬性排序排序
- SuperObject Delphi 的 JSON 屬性亂序 – 操作類改造 – 關於屬性順序的問題ObjectJSON
- 【Java】基本資料、包裝類間轉換與處理Java
- [Java] 基本資料、包裝類間轉換與處理Java
- XStream實現xml和java物件之間的互相轉換(包括對屬性,別名,下劃線_的處理),同理JSON也可以XMLJava物件JSON
- 關於時間 PHP 處理包遇到的問題時間序列化差值問題PHP
- Android之Retrofit2.0 處理返回json報文並轉換成bean物件AndroidJSONBean物件
- 使用@FeignClient中的fallback屬性處理介面呼叫異常問題client
- JSON繼承JsonConverter序列化與反序列化重寫類屬性JSON繼承
- Java中 set,list,array(集合與陣列)、Map相互轉換Java陣列
- Java中基本型別Array與複合型別List的互相轉換Java型別
- 容器,型別轉換。List。型別