kson alternatives and similar libraries
Based on the "JSON" category.
Alternatively, view kson alternatives based on common mentions on social networks and blogs.
-
kotlinx.serialization
Kotlin multiplatform / multi-format serialization -
jackson-module-kotlin
Module that adds support for serialization/deserialization of Kotlin (http://kotlinlang.org) classes and data classes. -
Kotson
Gson for Kotlin, Kotson enables you to parse and write JSON with Google's Gson using a conciser and easier syntax. -
Smartype by mParticle
Json Schema as code, autocomplete for your data model!
Appwrite - The Open Source Firebase alternative introduces iOS support
Do you think we are missing an alternative of kson or a related project?
README
[Kson - kotlin type adapter generator](kson-logo.png)
An annotation processor generates Gson TypeAdapter from Kotlin Data Classes
Motivation
By default, Gson uses reflection to read/write data from JSON. It's not only slow (benchmarks), also it breaks Kotlin's null-safe types.
For example:
// your entity class with non-nullable property
data class Entity(val id: Int)
// wrong response from server
val json = """{ "id": null }"""
// this won't throw error
val entity = gson.fromJson(json, Entity::class.java)
// throws NPE somewhere in runtime when you don't expect
entity.id
In order to avoid reflection, need to create a custom TypeAdapter for every entity class. It takes time, need to write boilerplate code, tests, etc. Here this library comes, it generates TypeAdapters automatically. You just need to register generated GsonTypeAdapterFactory in your GsonBuilder.
Usage
Add @Kson
annotation to your data classes and Kson will automatically generate <class name>TypeAdapter.kt
files.
@Kson
data class RoleEntity(
val id: Int,
@SerializedName("roleName") val name: String
)
@Kson
data class UserEntity(
val firstname: String,
val lastname: String,
val roles: List<RoleEntity>
)
// etc
Also you can use @KsonFactory
annotation to generate TypeAdapterFactory class
@KsonFactory
object FactoryProvider {
get() = KsonFactoryProvider()
}
val gson = GsonBuilder()
.registerTypeAdapterFactory(FactoryProvider.get())
.create()
// gson.fromJson(...)
Limitations & Known issues
Since this is an early version there are some unsupported properties
@Kson
data class UnsupportedDataClass(
@JsonAdapter(CustomAdapter::class) val id: String // custom type adapter
val name: String = "no name" // default values
val list: List<String?> // nullable generics
val `natural name`: String // "natural names"
)
Installation
To add KSON to your project, add the following to your module's build.gradle
:
repositories {
jcenter()
}
dependencies {
compile 'dev.afanasev:kson-annotation:<version>'
kapt 'dev.afanasev:kson-processor:<version>'
}