Was ist in Bezug auf Gson der Unterschied zwischen @Expose
und @SerializedName("stringValue")
?
Was ist in Bezug auf Gson der Unterschied zwischen @Expose
und @SerializedName("stringValue")
?
Antworten:
Auch wenn es spät ist, wollte ich diese Frage beantworten. Um es zu erklären, müssen wir wissen, was ist serialization
und deserialization
.
serialization
konvertiert object
in json string
und deserialization
konvertiert json string
in object
.
Nehmen wir an, wir haben eine User
Klasse ohne Anmerkungen.
public class User{
private String userName;
private Integer userAge;
public User(String name, Integer age){
userName = name;
userAge = age;
}
}
Und wir serialize
dies object
wie unten
User user = new User("Ahmed", 30);
Gson gson = new Gson();
String jsonString = gson.toJson(user);
Json String wird so sein
{
"userName":"Ahmed",
"userAge":30
}
Wenn wir Anmerkungen hinzufügen @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 String wird so sein
{
"name":"Ahmed",
"age":30
}
@Expose
wird verwendet, um zuzulassen oder zu verbieten serialization
und deserialization
.
@Expose
ist optional und hat zwei Konfigurationsparameter: serialize
und deserialize
. Standardmäßig sind sie auf true gesetzt. Zu serialize
und deserialize
mit @Expose
erstellen wir ein solches gson-Objekt
Gson gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
Unten userName
wird nicht deserialisiert. Der Wert von userName lautet null
.
@SerializedName("name")
@Expose(deserialize = false)
private String userName;
Unten userName
wird nicht serialisiert.
@SerializedName("name")
@Expose(serialize = false)
private String userName;
Json String wird so sein. Nur userAge
wird deserialisiert.
{
"age":30
}
@SerializeName
wird verwendet, um den Schlüssel @Expose
festzulegen, den das JSON- Objekt enthalten soll. Es wird jedoch verwendet, um zu entscheiden, ob die Variable für die Serialisierung und Deserialisierung verfügbar gemacht wird oder nicht. Hier ist die Dokumentation von @Expose
.
Expose
und hätten SerializeName
?
Expose
wird in seltenen Fällen verwendet und kann entfernt werden
@Expose
. (seine vollständige Syntax ist @Expose(serialize = <true/false>,deserialize = <true/false>)
, wobei true für beide Standard ist.
class Person{
String name;
String password;
}
Angenommen, wenn ich i annotation Expose über einen Variablennamen oder ein Kennwort ohne SerializedName setze , wird es als Variablenname serialisiert
Wenn wir jedoch SerializedName wie (" Benutzername ") oder (" Passwort ") eingeben , werden sie mit diesem Schlüssel serialisiert
wenn serialisiert
{"username":"trinadh","password":"hello"}
wenn nicht
{"name":"trinadh","password":"hello"}
Darüber hinaus werden @Expose
zwei boolesche Flags mitgeliefert : deserialize
und serialize
, um das Feld für eine Phase zu überspringen.