KotlinでのGson解析特定フィールドの問題解析を無視(@Expose,@SerializedName)
1718 ワード
引用:バックグラウンドデータを取得したり、バックグラウンドにリクエスト体を提出したりするときは、beanエンティティを渡す必要がありますが、このbeanにはシーケンス化したくないフィールドが定義されています.これらの特殊なフィールドをシーケンス化しないフィールドとしてマークするにはどうすればいいですか.私個人から言えば、一般的によく使われる3つの形式は以下の通りです.
@ExposeフィールドExposeには2つのプロパティがあります.serializeとdeserializeは、その名の通りシーケンス化と逆シーケンス化です.Gson解析で指定しない場合は、デフォルトはtrueです.
上記コードのシーケンス化後は{"name":"張三","sex":"男"}であり、age属性はない.类推カスタム解析ポリシー
シーケンス化後は{"name":"張三","sex":"男"}であり、age属性もない.権限フィルタの宣言
同様に、シーケンス化後は{"name":"張三","sex":"男"}であり、age属性もない.
@ExposeフィールドExposeには2つのプロパティがあります.serializeとdeserializeは、その名の通りシーケンス化と逆シーケンス化です.Gson解析で指定しない場合は、デフォルトはtrueです.
data class User(@Expose var name: String,
var age: Int,
@Expose var sex: String)
val str = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create().toJson(User(" ", 18, " "))
println(str)
上記コードのシーケンス化後は{"name":"張三","sex":"男"}であり、age属性はない.类推カスタム解析ポリシー
data class User(var name: String,
var age: Int,
var sex: String)
val str = GsonBuilder().setExclusionStrategies(new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getName().equls("age", ignore = true)
}
@Override
public boolean shouldSkipClass(Class> clazz) {
// Bean
return clazz.getName().contains("Bean");
}
}).create().toJson(User(" ", 18, " "))
println(str)
シーケンス化後は{"name":"張三","sex":"男"}であり、age属性もない.権限フィルタの宣言
data class User(var name: String,
protected var age: Int,
var sex: String)
val str = GsonBuilder().excludeFieldsWithModifiers(Modifier.PROTECTED).create().toJson(User(" ", 18, " "))
println(str)
同様に、シーケンス化後は{"name":"張三","sex":"男"}であり、age属性もない.