The results of the 2017 Ember Community Survey !

DS.Serializer Class addon/serializer.js:7


Extends: Ember.Object

Defined in: addon/serializer.js:7

Module: ember-data

DS.Serializer is an abstract base class that you should override in your application to customize it for your backend. The minimum set of methods that you should implement is:

  • normalizeResponse()
  • serialize()

And you can optionally override the following methods:

  • normalize()

For an example implementation, see DS.JSONSerializer, the included JSON serializer.

Show:

Methods

Properties

Show:

normalize

(typeClass, hash) Object

The normalize method is used to convert a payload received from your external data source into the normalized form store.push() expects. You should override this method, munge the hash and return the normalized payload.

Example:

1
2
3
4
5
6
7
8
9
10
Serializer.extend({
  normalize(modelClass, resourceHash) {
    var data = {
      id:            resourceHash.id,
      type:          modelClass.modelName,
      attributes:    resourceHash
    };
    return { data: data };
  }
})

Parameters:

typeClass DS.Model
hash Object

Returns:

Object

normalizeResponse

(store, primaryModelClass, payload, id, requestType) Object
Defined in addon/serializer.js:51
Available since 1.13.0

The normalizeResponse method is used to normalize a payload from the server to a JSON-API Document.

http://jsonapi.org/format/#document-structure

Example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Serializer.extend({
  normalizeResponse(store, primaryModelClass, payload, id, requestType) {
    if (requestType === 'findRecord') {
      return this.normalize(primaryModelClass, payload);
    } else {
      return payload.reduce(function(documentHash, item) {
        let { data, included } = this.normalize(primaryModelClass, item);
        documentHash.included.push(...included);
        documentHash.data.push(data);
        return documentHash;
      }, { data: [], included: [] })
    }
  }
});

Parameters:

store DS.Store
primaryModelClass DS.Model
payload Object
id String|Number
requestType String

Returns:

Object
JSON-API Document

serialize

(snapshot, options) Object

The serialize method is used when a record is saved in order to convert the record into the form that your external data source expects.

serialize takes an optional options hash with a single option:

  • includeId: If this is true, serialize should include the ID in the serialized object it builds.

Example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Serializer.extend({
  serialize(snapshot, options) {
    var json = {
      id: snapshot.id
    };

    snapshot.eachAttribute((key, attribute) => {
      json[key] = snapshot.attr(key);
    });

    snapshot.eachRelationship((key, relationship) => {
      if (relationship.kind === 'belongsTo') {
        json[key] = snapshot.belongsTo(key, { id: true });
      } else if (relationship.kind === 'hasMany') {
        json[key] = snapshot.hasMany(key, { ids: true });
      }
    });

    return json;
  },
});

Parameters:

snapshot DS.Snapshot
options [Object]

Returns:

Object
Show:

store

{DS.Store} public

The store property is the application's store that contains all records. It can be used to look up serializers for other model types that may be nested inside the payload response.

Example:

1
2
3
4
5
6
7
Serializer.extend({
  extractRelationship(relationshipModelName, relationshipHash) {
    var modelClass = this.store.modelFor(relationshipModelName);
    var relationshipSerializer = this.store.serializerFor(relationshipModelName);
    return relationshipSerializer.normalize(modelClass, relationshipHash);
  }
});