package Ġto mat o bean . json parser Ċ Ċ import Ġto mat o bean . json parser . type adapter .* Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . math . BigInteger Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . HashMap Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . full . is Subclass Of ĊĊ Ċ class ĠJson Formatter ( ĊĠĠĠĠĠĠĠ Ġdeserialize Adapter Map : ĠHashMap < K Class <* >, ĠDeserialize Adapter <* >> ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġserialize Adapter Map : ĠHashMap < K Class <* >, ĠSerialize Adapter <* >> ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġconfig : ĠJson Parser Config Ġ= ĠJson Parser Config ()) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ Serialize _ Type Adapter Map Ġ= Ġhash Map Of < K Class <* >, ĠType Adapter < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBoolean :: class Ġto ĠBoolean Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCharSequence :: class Ġto ĠCharSequence Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString :: class Ġto ĠString Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChar :: class Ġto ĠChar Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt :: class Ġto ĠInt Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLong :: class Ġto ĠLong Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShort :: class Ġto ĠShort Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble :: class Ġto ĠDouble Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFloat :: class Ġto ĠFloat Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal :: class Ġto ĠBigDecimal Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBigInteger :: class Ġto ĠBigInteger Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnum :: class Ġto ĠEnum Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate :: class Ġto ĠDate Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar :: class Ġto ĠCalendar Type Adapter () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ Deserialize _ Type Adapter Map Ġ= Ġhash Map Of < K Class <* >, ĠType Adapter < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBoolean :: class Ġto ĠBoolean Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCharSequence :: class Ġto ĠCharSequence Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString :: class Ġto ĠString Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChar :: class Ġto ĠChar Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt :: class Ġto ĠInt Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLong :: class Ġto ĠLong Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShort :: class Ġto ĠShort Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble :: class Ġto ĠDouble Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFloat :: class Ġto ĠFloat Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBigDecimal :: class Ġto ĠBigDecimal Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBigInteger :: class Ġto ĠBigInteger Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnum :: class Ġto ĠEnum Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate :: class Ġto ĠDate Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar :: class Ġto ĠCalendar Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMap :: class Ġto ĠHashMap Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCollection :: class Ġto ĠCollection Type Adapter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArray < Any >:: class Ġto ĠArray Type Adapter () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ DATE _ FORMAT Ġ= Ġ" yyyy - MM - dd ĠHH : mm : ss ĠZ " ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġget Deserialize Adapter ( k Class : ĠK Class <* >, Ġtype Adapter Map : ĠHashMap < K Class <* >, ĠDeserialize Adapter <* >> ): ĠDeserialize Adapter < *> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtype Adapter Map [ k Class ] Ġ?: Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk Class . is Subclass Of ( Enum :: class ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Adapter Map [ Enum :: class ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk Class . is Subclass Of ( Collection :: class ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Adapter Map [ Collection :: class ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk Class . is Subclass Of ( Map :: class )-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Adapter Map [ Map :: class ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk Class . java . isArray Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Adapter Map [ Array < Any >:: class ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġget Serialize Adapter ( k Class : ĠK Class <* >, Ġtype Adapter Map : ĠHashMap < K Class <* >, ĠSerialize Adapter <* >> ): ĠSerialize Adapter < *> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( k Class . is Subclass Of ( Enum :: class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtype Adapter Map [ Enum :: class ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtype Adapter Map [ k Class ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġm Deserialize Adapter Map Ġ= Ġhash Map Of < K Class <* >, ĠDeserialize Adapter <* >> (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġput All ( DEFAULT _ Deserialize _ Type Adapter Map ) ĊĠĠĠĠĠĠĠ Ġdeserialize Adapter Map ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput All ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġm Serialize Adapter Map Ġ= Ġhash Map Of < K Class <* >, ĠSerialize Adapter <* >> (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġput All ( DEFAULT _ Serialize _ Type Adapter Map ) ĊĠĠĠĠĠĠĠ Ġserialize Adapter Map ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput All ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġm Config : ĠJson Parser Config Ġ= Ġconfig ĊĠĠĠ Ġval Ġm Json Deserializer Ġ= ĠJson Deserializer () ĊĠĠĠ Ġval Ġm Json Serializer Ġ= ĠJsonSerializer () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFunction Ġto Ġserialize Ġkotlin Ġobject Ġto Ġjson Ġstring ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ obj ] Ġkotlin Ġobject Ġin Ġsubclass Ġof Ġ[ Any ] Ġclass Ġtype ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] Ġreturn Ġjson Ġstring Ġafter Ġserial izing ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠtoJson ( obj : ĠAny ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Json Serializer . serialize ( obj , Ġm Serialize Adapter Map , Ġm Config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFunction Ġto Ġdeserialize Ġjson Ġstring Ġto Ġkotlin Ġobject ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ T ] Ġtarget Ġkotlin Ġobject Ġtype ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ json ] Ġjson Ġstring Ġto Ġdeserialize ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ k Class ] ĠThe Ġkotlin Ġclass Ġof Ġthe Ġtarget Ġkotlin Ġtype Ġ[ T ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ T ] ĠThe Ġinstance Ġof ĠKotlin Ġobject Ġtype Ġ[ T ] Ġoutput ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT : ĠAny > Ġparse Json ( json : ĠString , Ġk Class : ĠK Class < T >): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġk Type Ġ= Ġobject Ġ: ĠType Token < T >() {}. get K Type Impl () ĊĠĠĠĠĠĠĠ Ġreturn Ġm Json Deserializer . parse Json ( json , Ġk Type , Ġk Class , Ġm Deserialize Adapter Map , Ġm Config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFunction Ġto Ġdeserialize Ġjson Ġstring Ġto Ġkotlin Ġobject Ġin Ġcollection Ġor Ġmap ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ T ] Ġtarget Ġkotlin Ġobject Ġtype ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ json ] Ġjson Ġstring Ġto Ġdeserialize ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ type Token ] ĠThe Ġ[ Type Token ] Ġobject Ġwith Ġkotlin Ġclass Ġof Ġthe Ġtarget Ġkotlin Ġtype Ġ[ T ] Ġmember ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ T ] ĠThe Ġinstance Ġof ĠCollection Ġor ĠMap Ġoutput ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T : ĠAny > Ġparse Json ( json : ĠString , Ġtype Token : ĠType Token < T >): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Json Deserializer . parse Json ( json , Ġtype Token , Ġm Deserialize Adapter Map , Ġm Config ) ĊĠĠĠ Ġ} Ċ }