<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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
    很詳細

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


    網站導航:
     
    主站蜘蛛池模板: 最近2019年免费中文字幕高清| 波多野结衣久久高清免费 | 亚洲天堂一区二区三区| 亚洲日本在线观看视频| 日韩一级视频免费观看| 国产情侣激情在线视频免费看| 亚洲AV中文无码乱人伦| 日韩av无码成人无码免费| 国产精品免费AV片在线观看| 亚州**色毛片免费观看| 亚洲AV性色在线观看| 亚洲人配人种jizz| 亚洲视频手机在线| 亚洲电影中文字幕| 亚洲AV综合色一区二区三区| 永久亚洲成a人片777777| 亚洲成av人片不卡无码久久| 国产精品冒白浆免费视频| 成人毛片免费视频| 女人18毛片a级毛片免费| 成人免费视频软件网站| 无码中文字幕av免费放| 999国内精品永久免费视频| 24小时免费看片| 97精品免费视频| 99无码人妻一区二区三区免费 | 国产亚洲美女精品久久久| 又粗又硬又黄又爽的免费视频| 免费黄色小视频网站| 香蕉视频在线观看免费国产婷婷| 一二三四影视在线看片免费| 免费三级毛片电影片| 男女做羞羞的事视频免费观看无遮挡| 久草视频免费在线观看| 中文字幕无码免费久久99| 永久免费av无码不卡在线观看| 97无码免费人妻超级碰碰夜夜| 免费高清资源黄网站在线观看 | 免费无码国产V片在线观看| 高潮毛片无遮挡高清免费视频| 一级做a爰片久久毛片免费陪|