Customize mappingΒΆ

To create a custom mapper, create an instance of dataclasses_serialization.mapper.json_mapper.JsonMapper. The mapping can be either overridden, or expand on the defaults.

>>> from dataclasses_serialization.mapper.mapper import Mapper
>>> from dataclasses_serialization.mapper.json_mapper import JsonMapper
>>> from dataclasses_serialization.serializer_base import (
...             noop_serialization, noop_deserialization, dict_serialization,
...             dict_deserialization, list_deserialization
...           )

To override the defaults completely, pass new values to serialization_functions and deserialization_functions arguments.

>>> custom_mapper = Mapper(
...    serialization_functions=lambda mapper: {
...        list: (lambda lst: list(map(mapper.serialize, lst))),
...        (str, int, float, bool, type(None)): noop_serialization
...    },
...    deserialization_functions=lambda mapper: {
...        list: (lambda cls, lst: list_deserialization(cls, lst, deserialization_func=mapper.deserialize)),
...        (str, int, float, bool, type(None)): noop_deserialization
...    }
...  )

To add or override the existing defaults use the register methods:

register_deserializers:

>>> from dataclasses_serialization.mapper.deserialize_helpers import force_int_deserializer
>>> mapper = Mapper().register_deserializers({int:force_int_deserializer})
>>> mapper.deserialize(int, 5.0)
5

register_serializers:

>>> from dataclasses_serialization.mapper.deserialize_helpers import force_int_deserializer
>>> mapper = Mapper().register_serializers({int:float})
>>> mapper.serialize(5)
5.0