一尘不染

Gson:@Expose与@SerializedName

json

关于Gson @Expose和之间有什么区别 @SerializedName("stringValue")


阅读 284

收藏
2020-07-27

共1个答案

一尘不染

即使很晚,我也想回答这个问题。为了解释它,我们必须知道什么是serializationdeserialization
serialization正在转换object为,json string并且deserialization正在转换json stringobject

假设我们的User课程没有注释。

public class User{
    private String userName;
    private Integer userAge;

    public User(String name, Integer age){
        userName = name;
        userAge = age;
    }
}

而我们serialize这个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用于允许和禁止serializationdeserialization
@Expose是可选的,它具有两个配置参数:serializedeserialize。默认情况下,它们设置为true。为了serializedeserialize@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
}
2020-07-27