def deserialize(self, data=None):
        """ Invoke the deserializer

        If the payload is a collection (more than 1 records)
        then a list will be returned of normalized dict's.

        If the payload is a single item then the normalized
        dict will be returned (not a list)

        :return: list or dict
        """

        data = []

        if self.req.content_type_params.get('header') != 'present':
            abort(exceptions.InvalidRequestHeader(**{
                'detail': 'When using text/csv your Content-Type '
                          'header MUST have a header=present parameter '
                          '& the payload MUST include a header of fields',
                'links': 'tools.ietf.org/html/rfc4180#section-3'
            }))

        try:
            reader = csv.DictReader(self.req.stream)

            self._validate_field_headers(reader)

            for row in reader:
                Parser.run(row, reader)

                row = Normalizer.run(row, reader)
                row = super(Deserializer, self).deserialize(data)

                data.append(row)
        except csv.Error:
            abort(exceptions.InvalidRequestBody)

        return data
Invoke the deserializer

        If the payload is a collection (more than 1 records)
        then a list will be returned of normalized dict's.

        If the payload is a single item then the normalized
        dict will be returned (not a list)

        :return: list or dict