当前位置: 首页 > 面试题库 >

Gson:@Expose与@SerializedName

澹台昆
2023-03-14
问题内容

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


问题答案:

即使很晚,我也想回答这个问题。为了解释它,我们必须知道什么是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
}


 类似资料:
  • 关于Gson,和之间有什么区别?

  • Expose 是一个帮助图配文生成的静态网站生成器。 当你有如下的图片或视频文件夹时: Expose 的 Bash 脚本可以将这些图像和视频转换成类似 jack.ventures 或 jack.works(作者个人博客)的形式。 如果你不喜欢这种风格,它还包含其他风格主题:Medium-style theme。 注:该软件已在 Windows / Cygwin,OSX 上测试,在 Linux 上运行应该也没问题。

  • 实现网格化的视图。一个主视图里面包含多个子视图,每个子视图是一个网格,用户可以添加新的网格视图或者删除任意网格视图,点击某个网格视图会弹出一个全屏视图,用于查看具体的内容。这种形式的浏览方式方便对多个页面浏览。LinkedIn的应用用到了这种视图浏览方式。 [Code4App.com]

  • 的Access-Control-Expose-Headers响应报头指示哪些报头可以公开为通过列出他们的名字的响应的一部分。 默认情况下,只显示6个简单的响应标头: Cache-Control Content-Language Content-Type Expires Last-Modified Pragma 如果您希望客户端能够访问其他标题,则必须使用Access-Control-Expose-

  • 问题内容: 我正在获取一个很大的json文档,我只想将其中的一部分解析为我的java类。我正在考虑使用jsonpath之类的东西来从中提取部分数据,而不是创建Java类的整个层次结构。 Jackson或Gson是否以任何方式支持jsonpath?如果是,您能否为此提供一些示例或指向另一个标准库? 例如,假设我有一个下面的文档,而我想在我的java类中仅从下面提取数据: $ .store.book

  • EXPOSE 声明端口 格式为 EXPOSE <端口1> [<端口2>...]。 EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,