我正在尝试将数据发送到接受三个类型为(字符串、字符串、QBUser 类)的参数的 .NET Web 服务。在 Javascript 中,我会像这样以 JSON 格式发送参数:
{sKey: "key", sUpdatetype: "edit", oQbUser: QBUser}
我以前从未遇到过该方法的任何问题,并且 .NET 将能够将其直接分类到服务器上的类对象中。使用 Swift,到目前为止,我已经成功地发送了书中几乎所有类型的 JSON,但是我在发送自定义类/结构作为参数时遇到了问题。这是我当前的代码:
func updateQbUser(k: String, t: String, oUser: QBUUser, completion: @escaping (_ oVisits: AnyObject) -> ()) {
let params: [String: Any] = ["sKey": k, "sUpdateType": t, "iObjectId": oUser]
let url = URL(string: "myWebService.asmx/updateQbUser")!
let session = URLSession.shared
var request = URLRequest(url: url)
request.httpMethod = "POST"
do { request.httpBody = try JSONSerialization.data(withJSONObject: params, options: .prettyPrinted) } catch let error { print(error.localizedDescription) }
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
guard error == nil else { return }
DispatchQueue.main.async { completion(response!) }
})
task.resume()
}
控制台显示的错误如下:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (QBUUser)'
QBUUser 类不是 NSString、NSNumber、NSArray、NSDictionary 或 NSNull 的实例,所以我一直不知道如何将它传递给服务器。
有没有办法在尝试发送之前将 QBUUser 类转换为上面列出的任何对象类型?我试图在类上运行一个循环,那是一个完全不同的锤子包,但得到了一些关于不能 AnyHashable over Array Literal 或类似的错误。有没有更好的方法我还没有发现?
参数必须以这种方式,所以我被困在那里。我只需要将类发送到另一端,因为它本质上只是在键/值对中。
这是控制台中打印的类的样子:
[QBUUser]:
ID:20786
created at:2017-05-03 15:05:56 +0000
updated at:2017-05-03 20:16:52 +0000
externalUserID:2456369827
blobID:0
facebookID:(null)
twitterID:(null)
twitterDigitsID:(null)
full name:Erik Grosskurth
email:erik@webgraphicsatlanta.com
login:Erik_2456369827
phone:(null)
tags:(
""
)
lastRequestAt:2017-05-03 20:20:16 +0000
customData:(null)
website:(null)