Index: django/core/serializers/json.py
===================================================================
--- django/core/serializers/json.py	(revision 4750)
+++ django/core/serializers/json.py	(working copy)
@@ -16,7 +16,11 @@
     Convert a queryset to JSON.
     """
     def end_serialization(self):
-        simplejson.dump(self.objects, self.stream, cls=DateTimeAwareJSONEncoder, **self.options)
+        options = {}
+        for option in self.options:
+            if option in ['skipkeys', 'ensure_ascii', 'check_circular', 'allow_nan', 'cls', 'indent', 'encoding']:
+                options[option] = self.options[option]
+        simplejson.dump(self.objects, self.stream, cls=DateTimeAwareJSONEncoder, **options)
         
     def getvalue(self):
         return self.stream.getvalue()
Index: django/core/serializers/xml_serializer.py
===================================================================
--- django/core/serializers/xml_serializer.py	(revision 4750)
+++ django/core/serializers/xml_serializer.py	(working copy)
@@ -97,7 +97,24 @@
         for relobj in getattr(obj, field.name).iterator():
             self.xml.addQuickElement("object", attrs={"pk" : str(relobj._get_pk_val())})
         self.xml.endElement("field")
-        
+
+    def handle_property(self, obj, attr):
+        """
+        Called to handle a model property
+        """
+        self.xml.startElement("property", {
+            "name" : attr
+        })
+
+        # Get a "string version" of the object's data (this is handled by the
+        # serializer base class).  None is handled specially.
+        value = self.get_string_value(obj, attr)
+        if value is not None:
+            self.xml.characters(str(value))
+
+        self.xml.endElement("property")
+
+    
     def _start_relational_field(self, field):
         """
         Helper to output the <field> element for relational fields
@@ -226,4 +243,4 @@
             inner_text.extend(getInnerText(child))
         else:
            pass
-    return "".join(inner_text)
\ No newline at end of file
+    return "".join(inner_text)
Index: django/core/serializers/base.py
===================================================================
--- django/core/serializers/base.py	(revision 4750)
+++ django/core/serializers/base.py	(working copy)
@@ -29,6 +29,7 @@
 
         self.stream = options.get("stream", StringIO())
         self.selected_fields = options.get("fields")
+        self.serialize_attributes = options.get("attributes")
 
         self.start_serialization()
         for obj in queryset:
@@ -42,6 +43,11 @@
                 else:
                     if self.selected_fields is None or field.attname[:-3] in self.selected_fields:
                         self.handle_fk_field(obj, field)
+            if self.serialize_attributes:
+                attrdict = obj.__class__.__dict__
+                for attr in attrdict:
+                    if isinstance(attrdict[attr], property):
+                        self.handle_property(obj, attr)
             for field in obj._meta.many_to_many:
                 if self.selected_fields is None or field.attname in self.selected_fields:
                     self.handle_m2m_field(obj, field)
@@ -57,8 +63,10 @@
             value = getattr(obj, field.name).strftime("%Y-%m-%d %H:%M:%S")
         elif isinstance(field, models.FileField):
             value = getattr(obj, "get_%s_url" % field.name, lambda: None)()
+        elif isinstance(field, models.Field):
+            value = field.flatten_data(follow=None, obj=obj).get(field.name, "")
         else:
-            value = field.flatten_data(follow=None, obj=obj).get(field.name, "")
+            value = getattr(obj, field)
         return str(value)
 
     def start_serialization(self):
Index: django/core/serializers/pyyaml.py
===================================================================
--- django/core/serializers/pyyaml.py	(revision 4750)
+++ django/core/serializers/pyyaml.py	(working copy)
@@ -18,7 +18,17 @@
     Convert a queryset to YAML.
     """
     def end_serialization(self):
-        yaml.dump(self.objects, self.stream, **self.options)
+        options = {}
+        for option in self.options:
+            if option in ['default_style', 'default_flow',
+                'canonical', 'indent', 'cls', 'indent',
+                'width','allow_unicode','line_break',
+                'encoding','explicit_start', 'explicit_end',
+                'version', 'tags']:
+
+                options[option] = self.options[option]
+
+        yaml.dump(self.objects, self.stream, **options)
         
     def getvalue(self):
         return self.stream.getvalue()
Index: django/core/serializers/python.py
===================================================================
--- django/core/serializers/python.py	(revision 4750)
+++ django/core/serializers/python.py	(working copy)
@@ -21,28 +21,36 @@
         pass
         
     def start_object(self, obj):
-        self._current = {}
+        self._current = {'fields': {}, 'properties': {}}
         
     def end_object(self, obj):
-        self.objects.append({
+
+        object = {
             "model"  : str(obj._meta),
             "pk"     : str(obj._get_pk_val()),
-            "fields" : self._current
-        })
+            "fields" : self._current['fields']
+        }
+        if self._current['properties']:
+            object.update({'properties':  self._current['properties']})
+
+        self.objects.append(object)
         self._current = None
         
     def handle_field(self, obj, field):
-        self._current[field.name] = getattr(obj, field.name)
+        self._current['fields'][field.name] = getattr(obj, field.name)
         
     def handle_fk_field(self, obj, field):
         related = getattr(obj, field.name)
         if related is not None:
             related = related._get_pk_val()
-        self._current[field.name] = related
+        self._current['fields'][field.name] = related
     
     def handle_m2m_field(self, obj, field):
-        self._current[field.name] = [related._get_pk_val() for related in getattr(obj, field.name).iterator()]
-    
+        self._current['fields'][field.name] = [related._get_pk_val() for related in getattr(obj, field.name).iterator()]
+
+    def handle_property(self, obj, attr):
+        self._current['properties'][attr] = getattr(obj, attr)
+ 
     def getvalue(self):
         return self.objects
 
Index: tests/modeltests/serializers/models.py
===================================================================
--- tests/modeltests/serializers/models.py	(revision 4750)
+++ tests/modeltests/serializers/models.py	(working copy)
@@ -40,6 +40,10 @@
 class AuthorProfile(models.Model):
     author = models.OneToOneField(Author)
     date_of_birth = models.DateField()
+
+    def is_cool(self):
+        return True
+    is_cool = property(is_cool)
     
     def __str__(self):
         return "Profile of %s" % self.author
@@ -130,15 +134,27 @@
 # pk identifier.
 >>> profile = AuthorProfile(author=joe, date_of_birth=datetime(1970,1,1))
 >>> profile.save()
-
 >>> json = serializers.serialize("json", AuthorProfile.objects.all())
 >>> json
 '[{"pk": "1", "model": "serializers.authorprofile", "fields": {"date_of_birth": "1970-01-01"}}]'
 
+>>> json = serializers.serialize("json", AuthorProfile.objects.all(), attributes=True)
+>>> json
+'[{"pk": "1", "model": "serializers.authorprofile", "properties": {"is_cool": true}, "fields": {"date_of_birth": "1970-01-01"}}]'
+
 >>> for obj in serializers.deserialize("json", json):
 ...     print obj
 <DeserializedObject: Profile of Joe>
 
+# Optionally serialize model properties using, attributes=True, this is also affected by the fields option
+>>> xml = serializers.serialize("xml", AuthorProfile.objects.all(), attributes=True) 
+>>> xml 
+'<?xml version="1.0" encoding="utf-8"?>\\n<django-objects version="1.0"><object pk="1" model="serializers.authorprofile"><field type="DateField" name="date_of_birth">1970-01-01</field><property name="is_cool">True</property></object></django-objects>'
+
+>>> yaml = serializers.serialize("yaml", AuthorProfile.objects.all(), attributes=True) 
+>>> yaml 
+"- fields: {date_of_birth: 1970-01-01}\\n  model: serializers.authorprofile\\n  pk: '1'\\n  properties: {is_cool: true}\\n"
+
 # Objects ids can be referenced before they are defined in the serialization data
 # However, the deserialization process will need to be contained within a transaction
 >>> json = '[{"pk": "3", "model": "serializers.article", "fields": {"headline": "Forward references pose no problem", "pub_date": "2006-06-16 15:00:00", "categories": [4, 1], "author": 4}}, {"pk": "4", "model": "serializers.category", "fields": {"name": "Reference"}}, {"pk": "4", "model": "serializers.author", "fields": {"name": "Agnes"}}]'
