Gsonの高度な使用とGsonBuilderの設定

3670 ワード

このブログは纯粋な技术交流のブログで、书いた文章はみんなにいくつかの问题を解决するように手伝って、あるいはみんなに参考と考えを持たせて、もっと多くの技术の分かち合いに関心を持ってくださいhttp://blog.36dr.net何か問題があったらメール[email protected].
概要
開発分野ではデータ伝達には多くの形式があり、通常、データ呼び出しインタラクションはXML、JSON、データストリーム、純テキストなどの形式を採用している.ますます多くのデータ呼び出しはJSONを採用して、JSONのデータ構造が簡単で、データバイトの長さが短くて、簡単で速くて何をしないのですか?
JSONの構造から、すべてのjsonデータは最終的に3つの状況に分けられる.
  • スカラー(Scalar)、すなわち単純な文字列または数値形式
  • .
  • シーケンス(Sequence)、すなわち、いくつかのデータが一定の順序で並んでいることを「配列」
  • と呼ぶ.
  • マッピング(Mapping)、すなわちkey/valueキー値はJsonの仕様に対して非常に簡単であり、この文書では一つ一つ説明しない:
  • "{"name":"kalen", "age":22}"
    

    デフォルトGsonはシーケンスと逆シーケンスの基本データ型とDateタイプしか使用できません.他のタイプは列挙するなど、カスタム解析器registerTypeAdapterがAndroid開発で使用する必要があります.
    
       com.google.code.gson
       gson
       2.1
    
    or
    compile 'com.google.code.gson:gson:2.3.1'
    

    Gsonクイック使用
  • 一般オブジェクトデータ解析
  •   String json_str = "{"name":"kalen", "age":22}";
      Gson gson = new Gson();
      User user = gson.fromGson(json_str, User.class);
    

    GsonのfromGsonによってJSONデータを解析してUserオブジェクトに付与することができ、Gson原理は反射機構を採用して実現され、具体的にはGoogleがGson原理を検索することができる.
  • 配列データ(Sequence)データ解析
  • Type listType = new TypeToken>() {}.getType();//    gson    
    List target = new LinkedList();//gson             
    target.add("blah");
    Gson gson = new Gson();
    String json = gson.toJson(target, listType);
    List target2 = gson.fromJson(json, listType);
    

    Gsonの高度な使用
    1.GsonBuilder
    GsonはGsonBuilderによって生成され、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();
    

    以上は,Idクラスに対して独立解析方式を単独で設定し,設定時間の解析形式を長時間形式とした.
    2.@Expose注記
    Gson()を使用してGsonを作成する場合@Exposeは効果がありません.GsonBuilderを使用してGsonを作成し、excludeFieldsWithoutExposeAnnotationを呼び出すと、@ExposeはtoJsonおよびfromGsonのシーケンス化および逆シーケンス化データに影響します.たとえば、次のようになります.
    public class User {
        @Expose private String firstName;
        @Expose(serialize = false) private String lastName;
        @Expose(serialize = false, deserialize = false)
        private String emailAddress;
        private String password;
     }
    

    例ではpasswordはtoJsonでもfromJsonでも使用されず、emailAddressとlastNameはシーケンス化(fromJson)時に採用され、emailAddressは逆シーケンス化(toJson)時には採用されない.
    @SerializedNameでシーケンスフィールドの名前を変更したり、注釈をカスタマイズしてGsonフィールド解析ポリシーsetFieldNamingStrategyを設定したりすることができます.詳細はRetrofit Demoに適用されます.
    3.GsonBuilderメソッドの説明
  • setFieldNamingPolicy設定シーケンスフィールドのネーミングポリシー(UPPER_CAMEL_CASE,UPPER_CAMEL_CASE_WITH_SPACES,LOWER_CASE_WITH_UNDERSCORES,LOWER_CASE_WITH_DASHES)
  • a d d D e s e r i a l i z ationExclusionStrategy逆シーケンス化を設定する場合は、ポリシーExclusionStrategyを使用します.逆シーケンス化の場合はフィールドを使用しないでください.もちろん、@Exporeを使用して置換できます.
  • excludeFieldsWithoutExposeAnnotation設定@Exporeなしではシーケンス化されず逆シーケンス化されません
  • a d d S e r a i a l i zationExclusionStrategyシーケンス化を設定するときのフィールド使用ポリシー(シーケンス化時にフィールドを使用しないなど)は、もちろん@Exporeで代用できます.
  • registerTypeAdapterは、ある特定のオブジェクトに対して固定的なシーケンスと逆シーケンス方式を設定し、JsonSerializerとJsonDeserializerインタフェース
  • を実現する.
  • setFieldNamingStrategyフィールドシーケンスと逆シーケンスを設定するときに名前が表示されます.また、
  • の代わりに@Serializerを使用することもできます.
  • setPrettyPrinting gson変換後の文字列を比較的きれいな文字列に設定
  • setDateFormatデフォルトDate解析時対応formatフォーマット
  • を設定