Was ist in Bezug auf Gson der Unterschied zwischen @Exposeund @SerializedName("stringValue")?
Was ist in Bezug auf Gson der Unterschied zwischen @Exposeund @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 serializationund deserialization.
serializationkonvertiert objectin json stringund deserializationkonvertiert json stringin object.
Nehmen wir an, wir haben eine UserKlasse ohne Anmerkungen.
public class User{
private String userName;
private Integer userAge;
public User(String name, Integer age){
userName = name;
userAge = age;
}
}
Und wir serializedies objectwie 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
}
@Exposewird verwendet, um zuzulassen oder zu verbieten serializationund deserialization.
@Exposeist optional und hat zwei Konfigurationsparameter: serializeund deserialize. Standardmäßig sind sie auf true gesetzt. Zu serializeund deserializemit @Exposeerstellen wir ein solches gson-Objekt
Gson gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
Unten userNamewird nicht deserialisiert. Der Wert von userName lautet null.
@SerializedName("name")
@Expose(deserialize = false)
private String userName;
Unten userNamewird nicht serialisiert.
@SerializedName("name")
@Expose(serialize = false)
private String userName;
Json String wird so sein. Nur userAgewird deserialisiert.
{
"age":30
}
@SerializeNamewird verwendet, um den Schlüssel @Exposefestzulegen, 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.
Exposeund hätten SerializeName?
Exposewird 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 @Exposezwei boolesche Flags mitgeliefert : deserializeund serialize, um das Feld für eine Phase zu überspringen.