Skip to content

Commit 3ac9b89

Browse files
authored
Provide documentation for @EncodeDefault and @JsonClassDiscriminator (#1832)
Fixes #1657
1 parent f3de873 commit 3ac9b89

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+634
-463
lines changed

docs/basic-serialization.md

+148-106
Large diffs are not rendered by default.

docs/json.md

+169-111
Large diffs are not rendered by default.

docs/serialization-guide.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Once the project is set up, we can start serializing some classes.
2424
* <a name='optional-property-initializer-call'></a>[Optional property initializer call](basic-serialization.md#optional-property-initializer-call)
2525
* <a name='required-properties'></a>[Required properties](basic-serialization.md#required-properties)
2626
* <a name='transient-properties'></a>[Transient properties](basic-serialization.md#transient-properties)
27-
* <a name='defaults-are-not-encoded'></a>[Defaults are not encoded](basic-serialization.md#defaults-are-not-encoded)
27+
* <a name='defaults-are-not-encoded-by-default'></a>[Defaults are not encoded by default](basic-serialization.md#defaults-are-not-encoded-by-default)
2828
* <a name='nullable-properties'></a>[Nullable properties](basic-serialization.md#nullable-properties)
2929
* <a name='type-safety-is-enforced'></a>[Type safety is enforced](basic-serialization.md#type-safety-is-enforced)
3030
* <a name='referenced-objects'></a>[Referenced objects](basic-serialization.md#referenced-objects)
@@ -115,7 +115,7 @@ Once the project is set up, we can start serializing some classes.
115115
* <a name='explicit-nulls'></a>[Explicit nulls](json.md#explicit-nulls)
116116
* <a name='allowing-structured-map-keys'></a>[Allowing structured map keys](json.md#allowing-structured-map-keys)
117117
* <a name='allowing-special-floating-point-values'></a>[Allowing special floating-point values](json.md#allowing-special-floating-point-values)
118-
* <a name='class-discriminator'></a>[Class discriminator](json.md#class-discriminator)
118+
* <a name='class-discriminator-for-polymorphism'></a>[Class discriminator for polymorphism](json.md#class-discriminator-for-polymorphism)
119119
* <a name='json-elements'></a>[Json elements](json.md#json-elements)
120120
* <a name='parsing-to-json-element'></a>[Parsing to Json element](json.md#parsing-to-json-element)
121121
* <a name='types-of-json-elements'></a>[Types of Json elements](json.md#types-of-json-elements)

guide/example/example-basic-02.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package example.exampleBasic02
44
import kotlinx.serialization.*
55
import kotlinx.serialization.json.*
66

7-
@Serializable
7+
@Serializable
88
class Project(val name: String, val language: String)
99

1010
fun main() {

guide/example/example-basic-03.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package example.exampleBasic03
44
import kotlinx.serialization.*
55
import kotlinx.serialization.json.*
66

7-
@Serializable
7+
@Serializable
88
data class Project(val name: String, val language: String)
99

1010
fun main() {

guide/example/example-classes-01.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ package example.exampleClasses01
44
import kotlinx.serialization.*
55
import kotlinx.serialization.json.*
66

7-
@Serializable
7+
@Serializable
88
class Project(
99
// name is a property with backing field -- serialized
1010
var name: String
1111
) {
1212
var stars: Int = 0 // property with a backing field -- serialized
13-
13+
1414
val path: String // getter only, no backing field -- not serialized
15-
get() = "kotlin/$name"
15+
get() = "kotlin/$name"
1616

1717
var id by ::name // delegated property -- not serialized
1818
}

guide/example/example-classes-02.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ package example.exampleClasses02
44
import kotlinx.serialization.*
55
import kotlinx.serialization.json.*
66

7-
@Serializable
7+
@Serializable
88
class Project private constructor(val owner: String, val name: String) {
99
constructor(path: String) : this(
10-
owner = path.substringBefore('/'),
10+
owner = path.substringBefore('/'),
1111
name = path.substringAfter('/')
12-
)
12+
)
1313

1414
val path: String
15-
get() = "$owner/$name"
15+
get() = "$owner/$name"
1616
}
1717

1818
fun main() {

guide/example/example-classes-04.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package example.exampleClasses04
44
import kotlinx.serialization.*
55
import kotlinx.serialization.json.*
66

7-
@Serializable
7+
@Serializable
88
data class Project(val name: String, val language: String)
99

1010
fun main() {

guide/example/example-classes-05.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package example.exampleClasses05
44
import kotlinx.serialization.*
55
import kotlinx.serialization.json.*
66

7-
@Serializable
7+
@Serializable
88
data class Project(val name: String, val language: String = "Kotlin")
99

1010
fun main() {

guide/example/example-classes-06.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ fun computeLanguage(): String {
99
return "Kotlin"
1010
}
1111

12-
@Serializable
12+
@Serializable
1313
data class Project(val name: String, val language: String = computeLanguage())
14-
14+
1515
fun main() {
1616
val data = Json.decodeFromString<Project>("""
1717
{"name":"kotlinx.serialization","language":"Kotlin"}

guide/example/example-classes-07.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package example.exampleClasses07
44
import kotlinx.serialization.*
55
import kotlinx.serialization.json.*
66

7-
@Serializable
7+
@Serializable
88
data class Project(val name: String, @Required val language: String = "Kotlin")
99

1010
fun main() {

guide/example/example-classes-08.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package example.exampleClasses08
44
import kotlinx.serialization.*
55
import kotlinx.serialization.json.*
66

7-
@Serializable
7+
@Serializable
88
data class Project(val name: String, @Transient val language: String = "Kotlin")
99

1010
fun main() {

guide/example/example-classes-09.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package example.exampleClasses09
44
import kotlinx.serialization.*
55
import kotlinx.serialization.json.*
66

7-
@Serializable
7+
@Serializable
88
data class Project(val name: String, val language: String = "Kotlin")
99

1010
fun main() {

guide/example/example-classes-10.kt

+15-3
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,21 @@ import kotlinx.serialization.*
55
import kotlinx.serialization.json.*
66

77
@Serializable
8-
class Project(val name: String, val renamedTo: String? = null)
8+
data class Project(
9+
val name: String,
10+
@EncodeDefault val language: String = "Kotlin"
11+
)
12+
13+
14+
@Serializable
15+
data class User(
16+
val name: String,
17+
@EncodeDefault(EncodeDefault.Mode.NEVER) val projects: List<Project> = emptyList()
18+
)
919

1020
fun main() {
11-
val data = Project("kotlinx.serialization")
12-
println(Json.encodeToString(data))
21+
val userA = User("Alice", listOf(Project("kotlinx.serialization")))
22+
val userB = User("Bob")
23+
println(Json.encodeToString(userA))
24+
println(Json.encodeToString(userB))
1325
}

guide/example/example-classes-11.kt

+4-6
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,10 @@ package example.exampleClasses11
44
import kotlinx.serialization.*
55
import kotlinx.serialization.json.*
66

7-
@Serializable
8-
data class Project(val name: String, val language: String = "Kotlin")
7+
@Serializable
8+
class Project(val name: String, val renamedTo: String? = null)
99

1010
fun main() {
11-
val data = Json.decodeFromString<Project>("""
12-
{"name":"kotlinx.serialization","language":null}
13-
""")
14-
println(data)
11+
val data = Project("kotlinx.serialization")
12+
println(Json.encodeToString(data))
1513
}

guide/example/example-classes-12.kt

+5-7
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,11 @@ import kotlinx.serialization.*
55
import kotlinx.serialization.json.*
66

77
@Serializable
8-
class Project(val name: String, val owner: User)
9-
10-
@Serializable
11-
class User(val name: String)
8+
data class Project(val name: String, val language: String = "Kotlin")
129

1310
fun main() {
14-
val owner = User("kotlin")
15-
val data = Project("kotlinx.serialization", owner)
16-
println(Json.encodeToString(data))
11+
val data = Json.decodeFromString<Project>("""
12+
{"name":"kotlinx.serialization","language":null}
13+
""")
14+
println(data)
1715
}

guide/example/example-classes-13.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ import kotlinx.serialization.*
55
import kotlinx.serialization.json.*
66

77
@Serializable
8-
class Project(val name: String, val owner: User, val maintainer: User)
8+
class Project(val name: String, val owner: User)
99

1010
@Serializable
1111
class User(val name: String)
1212

1313
fun main() {
1414
val owner = User("kotlin")
15-
val data = Project("kotlinx.serialization", owner, owner)
15+
val data = Project("kotlinx.serialization", owner)
1616
println(Json.encodeToString(data))
1717
}

guide/example/example-classes-14.kt

+4-9
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,13 @@ import kotlinx.serialization.*
55
import kotlinx.serialization.json.*
66

77
@Serializable
8-
class Box<T>(val contents: T)
8+
class Project(val name: String, val owner: User, val maintainer: User)
99

1010
@Serializable
11-
data class Project(val name: String, val language: String)
12-
13-
@Serializable
14-
class Data(
15-
val a: Box<Int>,
16-
val b: Box<Project>
17-
)
11+
class User(val name: String)
1812

1913
fun main() {
20-
val data = Data(Box(42), Box(Project("kotlinx.serialization", "Kotlin")))
14+
val owner = User("kotlin")
15+
val data = Project("kotlinx.serialization", owner, owner)
2116
println(Json.encodeToString(data))
2217
}

guide/example/example-classes-15.kt

+11-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,18 @@ import kotlinx.serialization.*
55
import kotlinx.serialization.json.*
66

77
@Serializable
8-
class Project(val name: String, @SerialName("lang") val language: String)
8+
class Box<T>(val contents: T)
9+
10+
@Serializable
11+
data class Project(val name: String, val language: String)
12+
13+
@Serializable
14+
class Data(
15+
val a: Box<Int>,
16+
val b: Box<Project>
17+
)
918

1019
fun main() {
11-
val data = Project("kotlinx.serialization", "Kotlin")
20+
val data = Data(Box(42), Box(Project("kotlinx.serialization", "Kotlin")))
1221
println(Json.encodeToString(data))
1322
}

guide/example/example-classes-16.kt

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// This file was automatically generated from basic-serialization.md by Knit tool. Do not edit.
2+
package example.exampleClasses16
3+
4+
import kotlinx.serialization.*
5+
import kotlinx.serialization.json.*
6+
7+
@Serializable
8+
class Project(val name: String, @SerialName("lang") val language: String)
9+
10+
fun main() {
11+
val data = Project("kotlinx.serialization", "Kotlin")
12+
println(Json.encodeToString(data))
13+
}

guide/example/example-json-01.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import kotlinx.serialization.json.*
66

77
val format = Json { prettyPrint = true }
88

9-
@Serializable
9+
@Serializable
1010
data class Project(val name: String, val language: String)
1111

12-
fun main() {
12+
fun main() {
1313
val data = Project("kotlinx.serialization", "Kotlin")
1414
println(format.encodeToString(data))
1515
}

guide/example/example-json-02.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ import kotlinx.serialization.json.*
66

77
val format = Json { isLenient = true }
88

9-
enum class Status { SUPPORTED }
9+
enum class Status { SUPPORTED }
1010

11-
@Serializable
11+
@Serializable
1212
data class Project(val name: String, val status: Status, val votes: Int)
13-
14-
fun main() {
13+
14+
fun main() {
1515
val data = format.decodeFromString<Project>("""
16-
{
16+
{
1717
name : kotlinx.serialization,
1818
status : SUPPORTED,
1919
votes : "9000"

guide/example/example-json-03.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import kotlinx.serialization.json.*
66

77
val format = Json { ignoreUnknownKeys = true }
88

9-
@Serializable
9+
@Serializable
1010
data class Project(val name: String)
11-
12-
fun main() {
11+
12+
fun main() {
1313
val data = format.decodeFromString<Project>("""
1414
{"name":"kotlinx.serialization","language":"Kotlin"}
1515
""")

guide/example/example-json-05.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import kotlinx.serialization.json.*
66

77
val format = Json { coerceInputValues = true }
88

9-
@Serializable
9+
@Serializable
1010
data class Project(val name: String, val language: String = "Kotlin")
1111

1212
fun main() {

guide/example/example-json-06.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ import kotlinx.serialization.json.*
66

77
val format = Json { encodeDefaults = true }
88

9-
@Serializable
9+
@Serializable
1010
class Project(
11-
val name: String,
11+
val name: String,
1212
val language: String = "Kotlin",
1313
val website: String? = null
14-
)
14+
)
1515

1616
fun main() {
1717
val data = Project("kotlinx.serialization")

guide/example/example-json-08.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import kotlinx.serialization.json.*
66

77
val format = Json { allowStructuredMapKeys = true }
88

9-
@Serializable
9+
@Serializable
1010
data class Project(val name: String)
11-
12-
fun main() {
11+
12+
fun main() {
1313
val map = mapOf(
1414
Project("kotlinx.serialization") to "Serialization",
1515
Project("kotlinx.coroutines") to "Coroutines"

guide/example/example-json-09.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ val format = Json { allowSpecialFloatingPointValues = true }
99
@Serializable
1010
class Data(
1111
val value: Double
12-
)
12+
)
1313

1414
fun main() {
1515
val data = Data(Double.NaN)

guide/example/example-json-10.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ val format = Json { classDiscriminator = "#class" }
1010
sealed class Project {
1111
abstract val name: String
1212
}
13-
14-
@Serializable
13+
14+
@Serializable
1515
@SerialName("owned")
1616
class OwnedProject(override val name: String, val owner: String) : Project()
1717

0 commit comments

Comments
 (0)