code: def as_version(self, version=Version.latest):
          
          if not isinstance(self, list):
              result = {}
              for k, v in self.iteritems() if isinstance(self, dict) else vars(self).iteritems():
                  k = self._props_corrected.get(k, k)
                  if isinstance(v, SerializableBase):
                      result[k] = v.as_version(version)
                  elif isinstance(v, list):
                      result[k] = []
                      for val in v:
                          if isinstance(val, SerializableBase):
                              result[k].append(val.as_version(version))
                          else:
                              result[k].append(val)
                  elif isinstance(v, uuid.UUID):
                      result[k] = unicode(v)
                  elif isinstance(v, datetime.timedelta):
                      result[k] = jsonify_timedelta(v)
                  elif isinstance(v, datetime.datetime):
                      result[k] = jsonify_datetime(v)
                  else:
                      result[k] = v
              result = self._filter_none(result)
          else:
              result = []
              for v in self:
                  if isinstance(v, SerializableBase):
                      result.append(v.as_version(version))
                  else:
                      result.append(v)
          return result
docs: Returns a dict that has been modified based on versioning
          in order to be represented in JSON properly
  
          A class should overload as_version(self, version)
          implementation in order to tailor a more specific representation
  
          :param version: the relevant version. This allows for variance
           between versions
          :type version: str | unicode