Gsonに関して、_@Expose
_と@SerializedName("stringValue")
の違いは何ですか?
@SerializeName
は、jsonオブジェクトに含めるキーを設定するために使用されますが、@Expose
は、変数をSerializationおよびDeserialisationに公開するかどうかを決定するために使用されます。 ここにあります@Expose
。
遅くても、この質問に答えたいと思いました。それを説明するには、serialization
およびdeserialization
とは何かを知る必要があります。 serialization
はobject
をjson string
に変換し、deserialization
はjson string
をobject
に変換しています。
注釈のないUser
クラスがあるとします。
public class User{
private String userName;
private Integer userAge;
public User(String name, Integer age){
userName = name;
userAge = age;
}
}
そして、以下のserialize
this object
User user = new User("Ahmed", 30);
Gson gson = new Gson();
String jsonString = gson.toJson(user);
JSON文字列は次のようになります
{
"userName":"Ahmed",
"userAge":30
}
注釈を追加する場合@SerializedName
public class User{
@SerializedName("name")
private String userName;
@SerializedName("age")
private Integer userAge;
public User(String name, Integer age){
userName = name;
userAge = age;
}
}
JSON文字列は次のようになります
{
"name":"Ahmed",
"age":30
}
@Expose
は、serialization
およびdeserialization
を許可または禁止するために使用されます。 @Expose
はオプションで、serialize
とdeserialize
の2つの構成パラメーターがあります。デフォルトでは、それらはtrueに設定されています。 serialize
およびdeserialize
に@Expose
を指定するには、次のようなgsonオブジェクトを作成します
Gson gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
以下のuserName
は逆シリアル化されません。 userNameの値はnull
になります。
@SerializedName("name")
@Expose(deserialize = false)
private String userName;
以下のuserName
はシリアル化されません。
@SerializedName("name")
@Expose(serialize = false)
private String userName;
JSON文字列は次のようになります。 userAge
のみが逆シリアル化されます。
{
"age":30
}
class Person{
String name;
String password;
}
SerializedNameを使用せずに変数名またはパスワードの上にi注釈Exposeを追加すると、AS変数名がシリアル化されます
しかし、SerializedName like( "sername")または( "password")を入力すると、それらはそのキーでシリアル化されます
シリアル化されている場合
{"username":"trinadh","password":"hello"}
そうでない場合
{"name":"trinadh","password":"hello"}
また、 @Expose
には2つのブールフラグが付いています :deserialize
およびserialize
。1つのフェーズでフィールドをスキップできます。