Gson:@Expose 与 @SerializedName

js

1个回答

写回答

Joker_ln

2025-07-09 16:55

+ 关注

Java
Java

Gson:@Expose 与 @SerializedName

在Java开发中,我们经常需要将对象转换为JSON格式的字符串或将JSON字符串转换为对象。为了实现这一目的,我们可以使用Gson库。Gson是Google开发的一个强大的Java库,用于将Java对象转换为JSON字符串,以及将JSON字符串转换为Java对象。它提供了多种注解来帮助开发者进行对象的序列化和反序列化操作。

在Gson库中,有两个常用的注解,分别是@Expose和@SerializedName。这两个注解在对象的序列化和反序列化过程中扮演着重要的角色。

@Expose注解

@Expose注解用于指示Gson库序列化或反序列化时是否包含该字段。默认情况下,Gson库会包含所有的字段。但有时候我们可能只想包含一部分字段,而将其他字段排除在外。这时就可以使用@Expose注解来实现。

下面是一个示例代码,演示了如何使用@Expose注解来排除字段:

Java

public class User {

@Expose

private String name;

@Expose

private int age;

private String emAIl;

// 省略getter和setter方法

}

public class MAIn {

public static void mAIn(String[] args) {

User user = new User();

user.setName("John");

user.setAge(25);

user.setEmAIl("john@example.com");

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

String JSon = gson.toJSon(user);

System.out.println(JSon);

}

}

在上面的示例中,只有被@Expose注解标记的name和age字段会被包含在生成的JSON字符串中,而emAIl字段则被排除在外。因此,输出的JSON字符串只包含name和age字段的值。

@SerializedName注解

@SerializedName注解用于指定在JSON字符串中的字段名与Java对象中的字段名之间的映射关系。有时候,JSON字符串中的字段名与Java对象中的字段名不一致,这时就可以使用@SerializedName注解来解决这个问题。

下面是一个示例代码,演示了如何使用@SerializedName注解来进行字段名的映射:

Java

public class User {

@SerializedName("full_name")

private String fullName;

private int age;

// 省略getter和setter方法

}

public class MAIn {

public static void mAIn(String[] args) {

String JSon = "{\"full_name\":\"John Doe\",\"age\":25}";

Gson gson = new Gson();

User user = gson.fromJSon(JSon, User.class);

System.out.println(user.getFullName());

System.out.println(user.getAge());

}

}

在上面的示例中,JSON字符串中的字段名full_name与Java对象中的字段名fullName不一致。通过在fullName字段上添加@SerializedName("full_name")注解,我们告诉Gson库将JSON字符串中的full_name字段映射到Java对象的fullName字段。因此,输出的结果为"John Doe"和25。

在本文中,我们介绍了Gson库中的两个常用注解@Expose和@SerializedName。@Expose注解用于指示Gson库序列化或反序列化时是否包含该字段,而@SerializedName注解用于指定JSON字符串中的字段名与Java对象中的字段名之间的映射关系。这两个注解在对象的序列化和反序列化过程中非常有用,可以帮助开发者灵活地控制字段的包含与排除,以及解决字段名不一致的问题。通过合理地使用这些注解,我们可以更加高效地进行对象的转换操作,提高开发效率。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号