KotlinでのGson解析特定フィールドの問題解析を無視(@Expose,@SerializedName)

1718 ワード

引用:バックグラウンドデータを取得したり、バックグラウンドにリクエスト体を提出したりするときは、beanエンティティを渡す必要がありますが、このbeanにはシーケンス化したくないフィールドが定義されています.これらの特殊なフィールドをシーケンス化しないフィールドとしてマークするにはどうすればいいですか.私個人から言えば、一般的によく使われる3つの形式は以下の通りです.
@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属性もない.