JsonToKotlinClass
JsonToKotlinClass copied to clipboard
Class resolution not working for optional String
Input
{
"programmers":[
{
"isFirstName":"Brett",
"lastName":"McLaughlin",
"email":"aaaa"
},
{
"firstName":"Jason",
"lastName":"Hunter",
"email":"bbbb"
},
{
"firstName":"Elliotte",
"lastName":"Harold",
"email":"cccc"
}
],
"authors":[
{
"firstName":null,
"lastName":"Asimov",
"genre":"science fiction"
},
{
"firstName":"Tad",
"lastName":"Williams",
"genre":"fantasy"
},
{
"firstName":"Frank",
"lastName":"Peretti",
"genre":"christian fiction"
}
],
"musicians":[
{
"firstName":"Eric",
"lastName":"Clapton",
"instrument":"guitar"
},
{
"firstName":"Sergei",
"lastName":"Rachmaninoff",
"instrument":"piano"
}
]
}
Settings
JsonToKotlinBuilder()
.setPackageName("com.my.package.name")
.enableVarProperties(false) // optional, default : false
.setPropertyTypeStrategy(PropertyTypeStrategy.AutoDeterMineNullableOrNot) // optional, default : PropertyTypeStrategy.NotNullable
.setDefaultValueStrategy(DefaultValueStrategy.AvoidNull) // optional, default : DefaultValueStrategy.AvoidNull
.setAnnotationLib(TargetJsonConverter.MoshiCodeGen) // optional, default: TargetJsonConverter.None
.enableComments(true) // optional, default : false
.enableOrderByAlphabetic(true) // optional : default : false
.enableInnerClassModel(true) // optional, default : false
.enableMapType(true)// optional, default : false
.enableCreateAnnotationOnlyWhenNeeded(true) // optional, default : false
.setIndent(4)// optional, default : 4
.setParentClassTemplate("android.os.Parcelable") // optional, default : ""
.enableKeepAnnotationOnClass(true) // optional, default : false
.enableAnnotationAndPropertyInSameLine(true) // optional, default : false
.enableParcelableSupport(true) // optional, default : false
.setPropertyPrefix("MyPrefix") // optional, default : ""
.setPropertySuffix("MySuffix") // optional, default : ""
.setClassSuffix("MyClassSuffix")// optional, default : ""
.enableForceInitDefaultValueWithOriginJsonValue(true) // optional, default : false
.enableForcePrimitiveTypeNonNullable(true) // optional, default : false
.build(json1, "GlossResponse") // finally, get KotlinClassCode string
Expected Output
package com.my.package.name
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
import android.os.Parcelable
import android.support.annotation.Keep
import kotlinx.android.parcel.Parcelize
import android.os.Parcelable
@SuppressLint("ParcelCreator")
@Parcelize
@Keep
@JsonClass(generateAdapter = true)
data class GlossResponseMyClassSuffix(
@Json(name = "authors") val MyPrefixAuthorsMySuffix: List<AuthorMyClassSuffix> = listOf(),
@Json(name = "musicians") val MyPrefixMusiciansMySuffix: List<MusicianMyClassSuffix> = listOf(),
@Json(name = "programmers") val MyPrefixProgrammersMySuffix: List<ProgrammerMyClassSuffix> = listOf()
) : Parcelable {
@SuppressLint("ParcelCreator")
@Parcelize
@Keep
@JsonClass(generateAdapter = true)
data class AuthorMyClassSuffix(
@Json(name = "firstName") val MyPrefixFirstNameMySuffix: String? = "", // null
@Json(name = "genre") val MyPrefixGenreMySuffix: String = "science fiction", // science fiction
@Json(name = "lastName") val MyPrefixLastNameMySuffix: String = "Asimov" // Asimov
) : Parcelable
@SuppressLint("ParcelCreator")
@Parcelize
@Keep
@JsonClass(generateAdapter = true)
data class MusicianMyClassSuffix(
@Json(name = "firstName") val MyPrefixFirstNameMySuffix: String = "Eric", // Eric
@Json(name = "instrument") val MyPrefixInstrumentMySuffix: String = "guitar", // guitar
@Json(name = "lastName") val MyPrefixLastNameMySuffix: String = "Clapton" // Clapton
) : Parcelable
@SuppressLint("ParcelCreator")
@Parcelize
@Keep
@JsonClass(generateAdapter = true)
data class ProgrammerMyClassSuffix(
@Json(name = "email") val MyPrefixEmailMySuffix: String = "aaaa", // aaaa
@Json(name = "firstName") val MyPrefixFirstNameMySuffix: String = "Jason", // Jason
@Json(name = "isFirstName") val MyPrefixIsFirstNameMySuffix: String = "Brett", // Brett
@Json(name = "lastName") val MyPrefixLastNameMySuffix: String = "McLaughlin" // McLaughlin
) : Parcelable
}
Actual Output
package com.my.package.name
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
import android.os.Parcelable
import android.support.annotation.Keep
import kotlinx.android.parcel.Parcelize
import android.os.Parcelable
@SuppressLint("ParcelCreator")
@Parcelize
@Keep
@JsonClass(generateAdapter = true)
data class GlossResponseMyClassSuffix(
@Json(name = "authors") val MyPrefixAuthorsMySuffix: List<AuthorMyClassSuffix> = listOf(),
@Json(name = "musicians") val MyPrefixMusiciansMySuffix: List<MusicianMyClassSuffix> = listOf(),
@Json(name = "programmers") val MyPrefixProgrammersMySuffix: List<ProgrammerMyClassSuffix> = listOf()
) : Parcelable {
@SuppressLint("ParcelCreator")
@Parcelize
@Keep
@JsonClass(generateAdapter = true)
data class AuthorMyClassSuffix(
@Json(name = "firstName") val MyPrefixFirstNameMySuffix: AnyMyClassSuffix? = AnyMyClassSuffix(), // null
@Json(name = "genre") val MyPrefixGenreMySuffix: String = "science fiction", // science fiction
@Json(name = "lastName") val MyPrefixLastNameMySuffix: String = "Asimov" // Asimov
) : Parcelable
@SuppressLint("ParcelCreator")
@Parcelize
@Keep
@JsonClass(generateAdapter = true)
data class MusicianMyClassSuffix(
@Json(name = "firstName") val MyPrefixFirstNameMySuffix: String = "Eric", // Eric
@Json(name = "instrument") val MyPrefixInstrumentMySuffix: String = "guitar", // guitar
@Json(name = "lastName") val MyPrefixLastNameMySuffix: String = "Clapton" // Clapton
) : Parcelable
@SuppressLint("ParcelCreator")
@Parcelize
@Keep
@JsonClass(generateAdapter = true)
data class ProgrammerMyClassSuffix(
@Json(name = "email") val MyPrefixEmailMySuffix: String = "aaaa", // aaaa
@Json(name = "firstName") val MyPrefixFirstNameMySuffix: String = "Jason", // Jason
@Json(name = "isFirstName") val MyPrefixIsFirstNameMySuffix: String = "Brett", // Brett
@Json(name = "lastName") val MyPrefixLastNameMySuffix: String = "McLaughlin" // McLaughlin
) : Parcelable
}
NOTE: This is actually a stress I've done on the library. It was working fine previously. Found appearance in v3.6.1