java - Gson:@Expose 与 @SerializedName

关于 Gson,@Expose@SerializedName("stringValue") 有什么区别?

最佳答案

即使为时已晚,我也想回答这个问题。 要解释它我们必须知道什么是serializationdeserializationserialization 正在将 object 转换为 json string 并且 deserialization 正在将 json string 转换为 对象

假设我们有一个没有注释的 User 类。

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

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

我们序列化这个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。 要使用 @Expose serializedeserialize 我们创建这样的 gson 对象

Gson gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

userName 以下的内容不会被反序列化。用户名的值为 null

@SerializedName("name")
@Expose(deserialize = false)
private String userName;

userName以下不会被序列化。

@SerializedName("name")
@Expose(serialize = false)
private String userName;

Json 字符串会是这样的。只有 userAge 会被反序列化。

{
    "age":30
}

https://stackoverflow.com/questions/34752200/

相关文章:

jquery - 如何使用jquery将项目添加到无序列表