posts - 110, comments - 101, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          google-gson-2.1-release.zip

          -----------------------------------------------------------------

          掃盲:

          Json是一種類似于XML的通用數據交換格式,具有比XML更高的傳輸效率.

           

          從結構上看,所有的數據(data)最終都可以分解成三種類型:

          第一種類型是標量(scalar),也就是一個單獨的字符串(string)或數字(numbers),比如"北京"這個單獨的詞。

          第二種類型是序列(sequence),也就是若干個相關的數據按照一定順序并列在一起,又叫做數組(array)或列表(List),比如"北京,上海"。

          第三種類型是映射(mapping),也就是一個名/值對(Name/value),即數據有一個名稱,還有一個與之相對應的值,這又稱作散列(hash)或字典(dictionary),比如"首都:北京"。

           

          Json的規格非常簡單,只用一個頁面幾百個字就能說清楚,而且Douglas Crockford聲稱這個規格永遠不必升級,因為該規定的都規定了。

          1) 并列的數據之間用逗號(",")分隔。

          2) 映射用冒號(":")表示。

          3) 并列數據的集合(數組)用方括號("[]")表示。

          4) 映射的集合(對象)用大括號("{}")表示。

          -----------------------------------------------------------------

          最快速入門貼:

          1. 對象的序列化和反序列化

           

          Type listType = new TypeToken<List<String>>() {}.getType();
          List<String> target = new LinkedList<String>(); 

          target.add("blah");

           Gson gson = new Gson(); 

          String json = gson.toJson(target, listType); 

          List<String> target2 = gson.fromJson(json, listType);

           OK,最簡方案打完收工.
          2.使用GsonBuilder.
          GsonBuilder用來生成Gson對象. 規定Gson的序列化和返序列化時的格式等內容.
          如:

          Gson gson = new GsonBuilder()
          .registerTypeAdapter(Id.class, new IdTypeAdapter())  

                  .enableComplexMapKeySerialization() 

               .serializeNulls()  

                   .setDateFormat(DateFormat.LONG)  

                  .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)//會把字段首字母大寫

                 .setPrettyPrinting() 

               .setVersion(1.0)  

                   .create();

          3. 使用注解,定制序列化字段.
          默認情況下@Expose注解是不起作用的,除非你用GsonBuilder創建Gson的時候調用了GsonBuilder.excludeFieldsWithoutExposeAnnotation()方法

           

           

          來個例子:

           

          public class User { 

          @Expose private String firstName; 

           @Expose(serialize = false) private String lastName;

           @Expose (serialize = false, deserialize = false) 

          private String emailAddress; private String password;

           }

          如果你創建Gson對象的時候使用的是new Gson(),toJson()和fromJson()方法將會對全部的字段生效.但是如果你使用的是GsonBuilder并且調用了excludeFieldsWithoutExposeAnnotation()方法.那么:toJson()和fromJson()將不會包括password.因為password沒有包含@Expose注解.
          序列化的時候將不包括 lastName和emailAddress,因為注解中標明不進行序列化.同樣的道理,反序列化時將不包括emailAddress.
          注:如果僅僅是想把某些特定的字段包含在外和話,可以使用transient 關鍵字聲明字段.
          4. 使用注解對序列化名稱進行聲明
          這個簡單,上例子都能懂,不解釋:

          public class SomeClassWithFields {

          @SerializedName("name")
          private final String someField;  

            private final String someOtherField;  

          public SomeClassWithFields(String a, String b) {  

          this.someField = a;
          this.someOtherField = b; 

          }

          ===== OUTPUT =====

          {"name":"a","someOtherField":"b"}

          5. 例用注解,根據版本進行序列化
          有的字段不是一開始就有的,會隨著版本的升級添加進來,那么在進行序列化和返序列化的時候就會根據版本號來選擇是否要序列化.
          @Since(版本號)能完美地實現這個功能.
          當然,GsonBuilder.setVersion(double)方法需要調用.
          例程如下:

          public class User {  

          private String firstName;  

          private String lastName;  

          @Since(1.0) private String emailAddress;  

          @Since(1.0) private String password;

          @Since(1.1) private Address address;

          }

          還的字段可能,隨著版本的升級而刪除,那么
          @Until(版本號)也能實現這個功能,GsonBuilder.setVersion(double)方法需要調用.

          public class User {  

              private String firstName;  

              private String lastName; 

          @Until(1.1) private String emailAddress;  

          @Until(1.1) private String password;

          }


          maven pom.xml 設置
            <dependency>
             <groupId>com.google.code.gson</groupId>
             <artifactId>gson</artifactId>
             <version>2.1</version>
            </dependency>









          評論

          # re: google-gson 序列化Object to json ,GsonBuilder設置 如version意義,注解 等  回復  更多評論   

          2012-10-30 16:23 by cailiang
          很詳細

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 昭苏县| 灵武市| 彩票| 车致| 元阳县| 巴林右旗| 灵台县| 河北区| 安化县| 嘉峪关市| 五台县| 光泽县| 福建省| 天柱县| 曲水县| 麻阳| 孝义市| 苗栗县| 崇文区| 秦皇岛市| 太谷县| 彰化县| 米林县| 湘潭市| 滨海县| 出国| 海南省| 鄢陵县| 克东县| 林芝县| 龙游县| 沙田区| 枞阳县| 阳城县| 巴东县| 清苑县| 登封市| 罗甸县| 新竹县| 卢湾区| 柘荣县|