Gson:@Expose 与@SerializedName

新手上路,请多包涵

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

原文由 Ahmed Faisal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 589
2 个回答

即使很晚我也想回答这个问题。要解释它,我们必须知道什么是 serializationdeserializationserialization is converting object into json string and deserialization is converting json string into object .

假设我们有 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 不会被反序列化。用户名的值将为 null

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

以下 userName 不会被序列化。

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

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

 {
    "age":30
}

原文由 Bek 发布,翻译遵循 CC BY-SA 4.0 许可协议

@SerializeName 用于设置 json 对象将包含的键,但是 @Expose 用于决定变量是否将公开用于序列化和反序列化。 @Expose 的文档。

原文由 Gavriel 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题