kotlinx.serialization: JSON deserializer with a fallback
In a perfect world, the consumer and producer of an API would always be in lockstep, only changing with each other and adhering to the strictest of contracts. Alas, we live in the real world, and it helps to be a bit pessimistic when controlling data falls just outside of your grasp.
If you are the consumer of an API, sometimes there might be a reasonable fallback if deserialization goes horribly wrong. In other words, we want a KSerializer
that will fall back to some default value if deserialization fails:
This extension of KSerializer
is modeled heavily after KSerializer.nullable
: it augments an existing KSerializer
with a bit of extra functionality. In this case, we wrap the deserialization call in a try/catch
, returning the provided default value
if any exception occurred during deserialization.
Now, putting it to use: for forwards-compatibility reasons, it can be helpful to allow enums to take a default UNKNOWN
value. Like the name suggests, we want any unknown value to be turned into UNKNOWN
instead of causing an error:
With the fallback serializer above, that’s all there is to it!
October 2020 edit: Updated to match kotlinx.serialization 1.0.0 interface.
Alex works at Livefront, where we always try to leave data a little bit cleaner than when we get it.