Skip to content
DeveloperMemos

Understanding the @Expose Annotation in GSON

GSON, Kotlin, Android1 min read

GSON is a popular Java library that provides functionalities for serializing and deserializing Java objects to (and from) JSON. When working with GSON, you may come across the need to control which fields of your Java objects are serialized and deserialized. This is where the @Expose annotation comes into play. In this article, we will explore the purpose and usage of the @Expose annotation in GSON, along with some examples to illustrate its functionality.

What is the @Expose Annotation?

The @Expose annotation is a part of the GSON library that allows developers to explicitly mark class members for serialization or deserialization. By default, GSON includes all fields in the serialization and deserialization process unless instructed otherwise. The @Expose annotation provides a way to selectively include or exclude fields from this process.

Using @Expose Annotation

To utilize the @Expose annotation, it's important to add the com.google.gson.annotations.Expose import at the top of your Kotlin file. Once imported, you can annotate class fields that you want to include or exclude during serialization or deserialization.

Let's take a look at an example using a simple data class:

1import com.google.gson.annotations.Expose
2import com.google.gson.Gson
3
4data class User(
5 @Expose val id: Int,
6 @Expose val name: String,
7 val email: String
8)
9
10fun main() {
11 val user = User(1, "John Doe", "john@example.com")
12 val gson = Gson()
13 val json = gson.toJson(user)
14 println(json)
15}

In this example, the id and name fields are annotated with @Expose. When the toJson function is called, only these annotated fields will be included in the resulting JSON string.

Excluding Fields

You can also use the @Expose annotation to exclude specific fields from serialization and deserialization. This can be achieved by setting the serialize and deserialize attributes of the @Expose annotation to false.

1data class User(
2 @Expose val id: Int,
3 @Expose val name: String,
4 @Expose(serialize = false, deserialize = false) val email: String
5)
6
7fun main() {
8 val user = User(1, "John Doe", "john@example.com")
9 val gson = Gson()
10 val json = gson.toJson(user)
11 println(json)
12}

In this modified example, the email field is now excluded from both serialization and deserialization by setting the serialize and deserialize attributes to false.


By utilizing the @Expose annotation effectively, developers can ensure that their JSON payloads contain precisely the data they intend, offering flexibility and security throughout the serialization and deserialization process.