This release contains all features and bugfixes from 1.1.0-RC plus an additional fix for incorrect exception type
(#1325 — Throw SerializationException instead of IllegalStateException in EnumSerializer) and uses release version of Kotlin 1.4.30.
In the light of JCenter shutdown, starting from 1.1.0-RC and now on,
all new releases of kotlinx.serialization are published directly to Maven Central and therefore are not available in https://kotlin.bintray.com/kotlinx/ repository.
We suggest you to remove jcenter() and other kotlin bintray repositories from your buildscripts and to use mavenCentral() repository instead.
1.1.0-RC
This is a release candidate of 1.1.0 version. Note that final 1.1.0 version may include more features and bugfixes,
which would be listed in the corresponding changelog.
Kotlin version requirement updated
Due to changes in calling conventions between compiler plugin and serialization core runtime, this release requires
Kotlin version at least 1.4.30-M1 (we recommend using 1.4.30 release version). However, these changes should not affect your code, because only deprecated functions were removed from public API.
See corresponding PR for the details.
Experimental support for inline classes (IR only)
Using 1.1.0-RC, you can mark inline classes as @Serializable and use them in other serializable classes.
Unsigned integer types (UByte, UShort, UInt and ULong) are serializable as well and have special support in JSON.
This feature requires Kotlin compiler 1.4.30-RC and enabling new IR compilers for JS and JVM.
Add serializerOrNull function for KType and Type arguments (#1164)
Allow shared prefix names in Properties (#1183) (thanks to TorRanfelt)
Add support for encoding/decoding Properties values as Strings (#1158) (thanks to daniel-jasinski)
Bugfixes and performance improvements
Support contextual serialization for derived classes (#1277) (thanks to Martin Raison)
Ensure serialization is usable from K/N background thread (#1282)
Fail on primitive type overflow during JsonElement deserialization (#1300)
Throw SerializationException instead of ISE when encountering an invalid boolean in JSON (#1299)
Optimize the loop for writing large varints in ProtoBuf (#1294)
Fix serializing property with custom accessors and backing field (#1197)
Optimize check for missing fields in deserialization and improve MissingFieldException message (#1153)
Improved support of nullable serializer in @UseSerializers annotation (#1195)
Correctly escape keys in JsonObject.toString() (#1246) (thanks to Karlatemp)
Treat Collection as ArrayList in serializer by type lookups (#1257)
Do not try to end structure in encode/decode structure extensions if an exception has been thrown, so the original exception will be propagated (#1201)
Properly cache serial names in order to improve performance of JSON parser with strict mode (#1209)
Fix dynamic serialization for nullable values (#1199) (thanks to ankushg)
This release contains a lot of new features and important improvements listed below;
Kotlin 1.5.0 is used as a default compiler and language version.
JSON performance improvements
JSON encoder and decoder were revisited and significantly rewritten,
which lead us to up to 2-3x times speedup in certain cases.
Additional details can be found in the corresponding issues: [1], [2].
Ability to specify alternative names during JSON decoding
The one of the most voted issues is fixed now — it is possible to specify multiple names for one property
using new @JsonNames annotation.
Unlike @SerialName, it only affects JSON decoding, so it is useful when dealing with different versions of the API.
We've prepared a documentation for you about it.
JsonConfiguration in public API
JsonConfiguration is exposed as a property of Json instance. You can use it to adjust behavior in
your custom serializers.
Check out more in the corresponding issue and the PR.
Generator for .proto files based on serializable Kotlin classes
Our implementation of Protocol Buffers format uses @Serializable Kotlin classes as a source of schema.
This is very convenient for Kotlin-to-Kotlin communication, but makes interoperability between languages complicated.
To resolve this issue, we now have a
schema generator that can produce .proto files out of Kotlin classes. Using it, you can keep Kotlin
classes as a source of truth and use traditional protoc compilers for other languages at the same time.
To learn more, check out the documentation for the new ProtoBufSchemaGenerator class or
visit the corresponding PR.
Note: this generator is on its experimental stage and any feedback is very welcomed.
Contextual serialization of generic classes
Before 1.2.0, it was impossible to register context serializer for generic class,
because contextual function accepted a single serializer.
Now it is possible to register a provider — lambda that allows to construct a serializer for generic class
out of its type arguments serializers. See the details in the documentation.
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps kotlinx-serialization-json from 1.0.1 to 1.2.0.
Release notes
Sourced from kotlinx-serialization-json's releases.
Changelog
Sourced from kotlinx-serialization-json's changelog.
... (truncated)
Commits
fc9343f
Update Kotlin and add changelog for 1.2.0 (#1436)75566cc
Generator for .proto files based on serializable Kotlin classes (#1255)38adb1b
Support serializer<T> on JS IR when T is an interface (#1431)f8f37a3
Merge remote-tracking branch 'origin/master' into devc6025c9
Support contextual serialization of generic classes (#1416)59d3216
Make JsonConfiguration public and expose it for custom serializers (#1409)436cf83
Replace Array<String> in JsonNames with varargf7b7f19
Fix incorrect skipElement() when string literals contain ] or }6087755
Add@JsonNames
annotation83d0faa
Fix serializer lookup by KType for third party generics (#1397)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)