def build(self) -> RegisteredTypeJSONEncoderType:
        """
        Builds JSON encoder that uses the encoders registered at the point in time when this method is called.
        :return: the JSON encoder
        """
        class_name = "%s_%s" % (_RegisteredTypeJSONEncoder.__class__.__name__, id(self))
        # Use encoders set at the point in time at which the encoder was built
        builder_snapshot = copy.deepcopy(self)
        return type(
                class_name,
                (_RegisteredTypeJSONEncoder, ),
                {
                    "_get_json_encoders_for_type": builder_snapshot.get_json_encoders_for_type
                }
        )