Gsonの高度な使用とGsonBuilderの設定
3670 ワード
このブログは纯粋な技术交流のブログで、书いた文章はみんなにいくつかの问题を解决するように手伝って、あるいはみんなに参考と考えを持たせて、もっと多くの技术の分かち合いに関心を持ってくださいhttp://blog.36dr.net何か問題があったらメール[email protected].
概要
開発分野ではデータ伝達には多くの形式があり、通常、データ呼び出しインタラクションはXML、JSON、データストリーム、純テキストなどの形式を採用している.ますます多くのデータ呼び出しはJSONを採用して、JSONのデータ構造が簡単で、データバイトの長さが短くて、簡単で速くて何をしないのですか?
JSONの構造から、すべてのjsonデータは最終的に3つの状況に分けられる.スカラー(Scalar)、すなわち単純な文字列または数値形式 .シーケンス(Sequence)、すなわち、いくつかのデータが一定の順序で並んでいることを「配列」 と呼ぶ.マッピング(Mapping)、すなわちkey/valueキー値はJsonの仕様に対して非常に簡単であり、この文書では一つ一つ説明しない:
デフォルトGsonはシーケンスと逆シーケンスの基本データ型とDateタイプしか使用できません.他のタイプは列挙するなど、カスタム解析器registerTypeAdapterがAndroid開発で使用する必要があります.
Gsonクイック使用一般オブジェクトデータ解析
GsonのfromGsonによってJSONデータを解析してUserオブジェクトに付与することができ、Gson原理は反射機構を採用して実現され、具体的にはGoogleがGson原理を検索することができる.配列データ(Sequence)データ解析
Gsonの高度な使用
1.GsonBuilder
GsonはGsonBuilderによって生成され、Gsonのシーケンス化とリターンシーケンス番号データを設定する.
以上は,Idクラスに対して独立解析方式を単独で設定し,設定時間の解析形式を長時間形式とした.
2.@Expose注記
Gson()を使用してGsonを作成する場合@Exposeは効果がありません.GsonBuilderを使用してGsonを作成し、excludeFieldsWithoutExposeAnnotationを呼び出すと、@ExposeはtoJsonおよびfromGsonのシーケンス化および逆シーケンス化データに影響します.たとえば、次のようになります.
例では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フォーマット を設定
概要
開発分野ではデータ伝達には多くの形式があり、通常、データ呼び出しインタラクションはXML、JSON、データストリーム、純テキストなどの形式を採用している.ますます多くのデータ呼び出しはJSONを採用して、JSONのデータ構造が簡単で、データバイトの長さが短くて、簡単で速くて何をしないのですか?
JSONの構造から、すべてのjsonデータは最終的に3つの状況に分けられる.
"{"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原理を検索することができる.
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メソッドの説明