@classmethod
def get_serialization_instance(cls, value):
    """Returns the native object corresponding to the serialized form passed
        in the ``value`` argument.

        :param value: This argument can be:
            * A list or tuple of native types aligned with cls._type_info.
            * A dict of native types.
            * The native type itself.

            If the value type is not a ``list``, ``tuple`` or ``dict``, the
            value is returned untouched.
        """
    if isinstance(value, list) or isinstance(value, tuple):
        assert len(value) <= len(cls._type_info)
        cls_orig = cls
        if cls.__orig__ is not None:
            cls_orig = cls.__orig__
        inst = cls_orig()
        keys = cls.get_flat_type_info(cls).keys()
        for i in range(len(value)):
            setattr(inst, keys[i], value[i])
    elif isinstance(value, dict):
        cls_orig = cls
        if cls.__orig__ is not None:
            cls_orig = cls.__orig__
        inst = cls_orig()
        for k in cls.get_flat_type_info(cls):
            setattr(inst, k, value.get(k, None))
    else:
        inst = value
    return inst
