How to serialize BigDecimal into unquoted JSON num...
# serialization
m
How to serialize BigDecimal into unquoted JSON number?
1
g
Something like that:
Copy code
// Standard BigDecimal serializer that encode/decode to/from a string
public object BigDecimalSerializer : KSerializer<BigDecimal> {
    override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Decimal", PrimitiveKind.STRING)

    override fun serialize(encoder: Encoder, value: BigDecimal) {
        // I'm using BigNum, to be adjusted with your lib
        encoder.encodeString(value.toStringExpanded())
    }

    override fun deserialize(decoder: Decoder): BigDecimal {
        return decoder.decodeString().toBigDecimal()
    }
}

// Unquoted serializer for BigDecimal.
public object JsonBigDecimalSerializer : JsonTransformingSerializer<BigDecimal>(BigDecimalSerializer) {
    // This descriptor is set to DOUBLE but this doesn't impact serialization in JsonTransformingSerializer
    override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Decimal", PrimitiveKind.DOUBLE)
    override fun transformSerialize(element: JsonElement): JsonElement {
        return JsonUnquotedLiteral(element.jsonPrimitive.content)
    }

    override fun transformDeserialize(element: JsonElement): JsonElement {
        return JsonPrimitive(element.jsonPrimitive.content)
    }
}
115 Views