   }
 
   public static func GenomeSerializer<T: MappableObject>(keyPath: String?) -> ResponseSerializer<[T], NSError> {
-    let serializer = parse([JSON].self, keyPath: keyPath) { json -> [T] in
+    let serializer = parse(keyPath) { (json: [JSON]) -> [T] in
       let parsedArray = try [T].mappedInstance(json)
       return parsedArray
     }

  // MARK: Serialization

  public static func GenomeSerializer<T: MappableObject>(keyPath: String?) -> ResponseSerializer<T, NSError> {
    let serializer = parse(JSON.self, keyPath: keyPath) { json -> T in
      let parsedObject = try T.mappedInstance(json)
      return parsedObject
    }

    case JSONError
  }

  private static func parse<T, U>(keyPath: String?, callback: U throws -> T) -> ResponseSerializer<T, NSError> {
    return ResponseSerializer { request, response, data, error in
      guard error == nil else { return .Failure(error!) }

