 public func <-- <T: Deserializable>(inout array: [T], dataString: String) -> [T] {
   return array <-- dataStringToObject(dataString)
 }
+
+public func <-- <T: Deserializable>(inout map: [String: T]?, dataString: String) -> [String:T]? {
+    return map <-- dataStringToObject(dataString)
+}
+
+public func <-- <T: Deserializable>(inout map: [String: T], dataString: String) -> [String:T] {
+    return map <-- dataStringToObject(dataString)
+}
+
+

  return object
}

/// MARK: Primitive Type Deserialization

// For optionals.
public func <-- <T>(inout property: T?, value: AnyObject?) -> T? {

  return array
}

// MARK: Custom Object Map Deserialization

public func <-- <T: Deserializable>(inout map: [String: T]?, dataObject: AnyObject?) -> [String: T]? {
  if let dataMap = convertToNilIfNull(dataObject) as? [String: JSONDictionary] {
    map = [String: T]()
    for (key, data) in dataMap {
      map![key] = T(data: data)
    }
  } else {
    map = nil
  }
  return map
}

public func <-- <T: Deserializable>(inout map: [String: T], dataObject: AnyObject?) -> [String: T] {
  var newMap: [String: T]?
  newMap <-- dataObject
  if let newMap = newMap { map = newMap }
  return map
}

// MARK: Raw Value Representable (Enum) Deserialization

public func <-- <T: RawRepresentable>(inout property: T?, value: AnyObject?) -> T? {
  var newEnumValue: T?
  var newRawEnumValue: T.RawValue?
  newRawEnumValue <-- value
  if let unwrappedNewRawEnumValue = newRawEnumValue {
    if let enumValue = T(rawValue: unwrappedNewRawEnumValue) {
      newEnumValue = enumValue
    }
  }
  property = newEnumValue
  return property
}

// For non-optionals.
public func <-- <T: RawRepresentable>(inout property: T, value: AnyObject?) -> T {
  var newValue: T?
  newValue <-- value
  if let newValue = newValue { property = newValue }
  return property
}

// MARK: JSON String Deserialization

private func dataStringToObject(dataString: String) -> AnyObject? {
  let data: NSData = dataString.dataUsingEncoding(NSUTF8StringEncoding)!
    do {
        let jsonObject = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(rawValue: 0))
        return jsonObject
    } catch {
        return nil
    }
}

public func <-- <T: Deserializable>(inout instance: T?, dataString: String) -> T? {
