'Serialize a queryset.'

def serialize(self, queryset, **options):

    self.options = options
    self.stream = options.pop('stream', six.StringIO())
    self.selected_fields = options.pop('fields', None)
    self.use_natural_keys = options.pop('use_natural_keys', False)
    self.start_serialization()
    self.first = True
    for obj in queryset:
        self.start_object(obj)
        concrete_model = obj._meta.concrete_model
        for field in concrete_model._meta.local_fields:
            if field.serialize:
                if (field.rel is None):
                    if ((self.selected_fields is None) or (field.attname in self.selected_fields)):
                        self.handle_field(obj, field)
                elif ((self.selected_fields is None) or (field.attname[:(-3)] in self.selected_fields)):
                    self.handle_fk_field(obj, field)
        for field in concrete_model._meta.many_to_many:
            if field.serialize:
                if ((self.selected_fields is None) or (field.attname in self.selected_fields)):
                    self.handle_m2m_field(obj, field)
        self.end_object(obj)
        if self.first:
            self.first = False
    self.end_serialization()
    return self.getvalue()
