分享

Java对象的序列化与反序列化

 沙门空海 2018-03-16
     说到Java对象的序列化与反序列化,我们首先想到的应该是Java的Serializable接口,这玩意在两个系统之间的DTO对象里面可能会用到,用于系统之间的数据传输。或者在RPC(远程方法调用)时可能会用到。
但其实若是用于数据传输,xml和json两种数据格式用得更多一些。我在第一家公司上班是也曾经自己封装过Java对象与xml相互转换的工具,你可能会说为什么不用XStream呢,XStream确实好用,但是在Applet环境下可以使用的xml类库也就只有jdom了,连dom4j在Applet环境下都没有权限使用(Java反射的某些特性是需要权限的,Applet的安全机制不允许)。

扯远了,本文要说的是Java对象与Json的相互转换。目前Java常用的Json类库有3种,即fastjson、jackson和gson,分别介绍如何将一个Java对象转换成Json和将一个Json字符串转换成Java对象,其实它们的用法大同小异。

一、首先看Maven依赖
二、需要序列化的POJO和初始化代码
三、fastjson的使用
四、jackson的使用
五、gson的使用

一、首先看Maven依赖

若不会maven,请参考Maven的基本用法:http://jisonami./blog/2300036


二、需要序列化的POJO和初始化代码
以下3种类库的使用均使用下面这个POJO
Java代码  收藏代码
  1. public class User {  
  2.     public User(){}  
  3.     private String id;  
  4.     private String name;  
  5.     private String password;  
  6.     public String getId() {  
  7.         return id;  
  8.     }  
  9.     public void setId(String id) {  
  10.         this.id = id;  
  11.     }  
  12.     public String getName() {  
  13.         return name;  
  14.     }  
  15.     public void setName(String name) {  
  16.         this.name = name;  
  17.     }  
  18.     public String getPassword() {  
  19.         return password;  
  20.     }  
  21.     public void setPassword(String password) {  
  22.         this.password = password;  
  23.     }  
  24.     @Override  
  25.     public String toString() {  
  26.         return "User [id=" + id + ", name=" + name + ", password=" + password  
  27.                 + "]";  
  28.     }     
  29. }  


Java代码  收藏代码
  1. /** 
  2.  * 初始化User对象 
  3.  * @return user 
  4.  */  
  5. private static User initUser(){  
  6.     User user = new User();  
  7.     user.setId("1");  
  8.     user.setName("jison");  
  9.     user.setPassword("jison");  
  10.     return user;  
  11. }  


三、fastjson的使用
fastjson的主要工具类是JSON,以下代码实现Java对象的序列化与反序列化
Java代码  收藏代码
  1. // 将Java对象序列化为Json字符串  
  2.     String objectToJson = JSON.toJSONString(initUser());  
  3.     System.out.println(objectToJson);  
  4.     // 将Json字符串反序列化为Java对象  
  5.     User user = JSON.parseObject(objectToJson, User.class);  
  6.     System.out.println(user);  


四、jackson的使用
jackson我们经常用到的是它的数据绑定包下的ObjectMapper类,以下代码实现Java对象的序列化与反序列化
Java代码  收藏代码
  1. ObjectMapper objectMapper = new ObjectMapper();  
  2.     // 将Java对象序列化为Json字符串  
  3.     String objectToJson = objectMapper.writeValueAsString(initUser());  
  4.     System.out.println(objectToJson);  
  5.     // 将Json字符串反序列化为Java对象  
  6.     User user = objectMapper.readValue(objectToJson, User.class);  
  7.     System.out.println(user);  


五、gson的使用
gson的主要工具类是Gson,使用GsonBuilder构造,以下代码实现Java对象的序列化与反序列化
Java代码  收藏代码
  1. Gson gson = new GsonBuilder().create();  
  2.     // 将Java对象序列化为Json字符串  
  3.     String objectToJson = gson.toJson(initUser());  
  4.     System.out.println(objectToJson);  
  5.     // 将Json字符串反序列化为Java对象  
  6.     User user = gson.fromJson(objectToJson, User.class);  
  7.     System.out.println(user);  


以上3种json类库的完整代码如下:
Java代码  收藏代码
  1. public class JsonUtils {  
  2.   
  3.     /** 
  4.      * 初始化User对象 
  5.      * @return user 
  6.      */  
  7.     private static User initUser(){  
  8.         User user = new User();  
  9.         user.setId("1");  
  10.         user.setName("jison");  
  11.         user.setPassword("jison");  
  12.         return user;  
  13.     }  
  14.       
  15.     public static void main(String[] args) throws Exception {  
  16.         // fastjson用法  
  17.         fastjson();  
  18.         // jackson用法  
  19.         jackson();  
  20.         // gson用法  
  21.         gson();  
  22.     }  
  23.       
  24.     private static void fastjson(){  
  25.         // 将Java对象序列化为Json字符串  
  26.         String objectToJson = JSON.toJSONString(initUser());  
  27.         System.out.println(objectToJson);  
  28.         // 将Json字符串反序列化为Java对象  
  29.         User user = JSON.parseObject(objectToJson, User.class);  
  30.         System.out.println(user);  
  31.     }  
  32.       
  33.     private static void jackson() throws Exception{  
  34.         ObjectMapper objectMapper = new ObjectMapper();  
  35.         // 将Java对象序列化为Json字符串  
  36.         String objectToJson = objectMapper.writeValueAsString(initUser());  
  37.         System.out.println(objectToJson);  
  38.         // 将Json字符串反序列化为Java对象  
  39.         User user = objectMapper.readValue(objectToJson, User.class);  
  40.         System.out.println(user);  
  41.     }  
  42.       
  43.     private static void gson(){  
  44.         Gson gson = new GsonBuilder().create();  
  45.         // 将Java对象序列化为Json字符串  
  46.         String objectToJson = gson.toJson(initUser());  
  47.         System.out.println(objectToJson);  
  48.         // 将Json字符串反序列化为Java对象  
  49.         User user = gson.fromJson(objectToJson, User.class);  
  50.         System.out.println(user);  
  51.     }  
  52. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多