UserList という名前のモデル クラスがあり、id、code、[Friends] が配列として含まれています。この場合、Friends もモデル クラスです。Friends クラスの属性は、name、surname、email、company、phone です。
class Friends: NSObject,Codable,Mappable {
var phone = String()
var name = String()
var surname = String()
var company = String()
var email = String()
required init?(map: Map){
}
override init() {
}
func mapping(map: Map) {
name <- map["name"]
email <- map["email"]
company <- map["company"]
surname <- map["surname"]
phone <- map["phone"]
}
}
class UserList: NSObject,Codable,Mappable {
var friendsList = [Friends]()
var code = Int()
var id = String()
required init?(map: Map){
}
override init() {
}
func mapping(map: Map) {
id <- map["id"]
code <- map["code"]
friendsList <- map["friendsList"]
}
}
次のように UserList クラスをフェッチします。
let contacts = UserList()
orderedContacts.forEach({
for record in $0.value {
let contact = Friends()
contact.name = record.givenName
contact.surname = record.familyName
contact.email = (record.emailAddresses.first?.value as String?) ?? ""
contact.company = record.organizationName
contact.phone = (record.phoneNumbers.first?.value.stringValue) ?? ""
contacts.friendsList.append(contact)
}
})
contacts.id = "57459bd9-f4c6-4fca-b5a4-6b4bc603b64c"
contacts.code = "BFF"
結局のところ、SwiftyJSON で変換した JSON 文字列があります。この変換により、正しい json 文字列が得られます。問題はない。その後、この json 文字列を Dictionary としてディクショナリに変換して、パラメータとして Alamofire リクエストに渡します。
let newJsonA = contacts.toJSONString(prettyPrint: true)!
let newJson :Dictionary<String,Any>? = convertToDictionary(text: newJsonA)
文字列を変換に送信すると、コンソールに次のような出力が表示されます。
["Friends": <__NSArrayI 0x12aa96e00>(
{
name = "First";
email = "";
company = "";
surname = "Record";
phone = "123456789";
},
{
name = "Second";
email = "";
company = "";
surname = "Record";
phone = "987654321";
}
)
"code": "BFF",
"id": "57459bd9-f4c6-4fca-b5a4-6b4bc603b64c" ]
ご覧のとおり、json は正しい形式ではありません。ディクショナリ変換後、「<__NSArrayI 0x12aa96e00>(」がディクショナリに追加されます。Alamofire リクエストがこのように失敗します。
Error Domain=com.alamofireobjectmapper.error Code=2 "ObjectMapper failed to serialize response." UserInfo={NSLocalizedFailureReason=ObjectMapper failed to serialize response.}
応答値を正しくマッピングしていると確信しています。問題は、パラメーターとして送信するjson辞書配列だと思います。この問題に直面した人はいますか?