google / google/gson

Serialization with value class

Open
#1,899 2 comments 0 reactions 0 assignees View on GitHub
enhancement kotlin
Dominant language
Java
Stars
24.2k
Forks
4.5k
Avg merge
6d 4h
Merged PRs (30d)
12

Description

I figured out, that serialization of value class is ok, only when inside another class and single item.

When you want to serialize a list instances of inline classes into another filed or simple instance inline class, then you get unexpected behaviour, i think. Cases are very similar.

```
// definitions
@JvmInline
value class StringWrapper(
val value: String?,
)

data class DataClassToSerialize(
@SerializedName("fieldName")
val fieldName: StringWrapper,
)

data class ListDataClassToSerialize(
@SerializedName("fieldName")
val fieldName: List,
)

// examples
val stringWrapper = StringWrapper("stringValue")
val resultWrapperJson = Gson().toJson(stringWrapper)
// actual: {"value":"stringValue"}, expected: "stringValue"

val dataClassToSerialize = DataClassToSerialize(
fieldName = stringWrapper,
)
val resultJson = Gson().toJson(dataClassToSerialize)
// {"fieldName":"stringValue"} It's ok

val listDataClassToSerialize = ListDataClassToSerialize(
fieldName = listOf(stringWrapper),
)
val resultListJson = Gson().toJson(listDataClassToSerialize)
// actual: {"fieldName":[{"value":"stringValue"}]}, expected: {"fieldName":[{"stringValue"}]}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.