JSONEncoder 不支持 IOS 13- 以下的整数值
JSONEncoder doesnt work integer values below IOS 13-
我正在尝试将一个整数值发送到带有正文的 WebService,所以我创建了一个这样的函数:
static func GetRoomVersionAndRemainingSeconds(auctionId:Int,completed:@escaping (ServiceResultDene<String>)->()){
var memberJson : String = ""
do{
let jsonEncoder = JSONEncoder()
let jsonData = try jsonEncoder.encode(auctionId)
memberJson = String(data: jsonData, encoding: String.Encoding.utf8)!
}catch{
print(error)
}
var request = URLRequest(url: URL(string: WebServiceUrls.GetRoomVersionAndRemainingSeconds)!)
request.httpMethod = HTTPMethod.post.rawValue
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue(Util.cookie, forHTTPHeaderField: "Cookie")
request.httpBody = (memberJson).data(using: .unicode)
Alamofire.request(request).responseJSON{response in
....
}
当我尝试上面的代码时,它完美地编码了 IOS 13+
上的整数值 -- memberJson is = "\"4\""
但是当我在 IOS 12.4
上尝试这个时它不编码并且 error.localizedDescription
returns : invalidValue(4, Swift.EncodingError.Context(codingPath: [], debugDescription: "Top-level Int encoded as number JSON fragment.", underlyingError: nil))
这里有什么问题?任何建议都可以是 good.Thanks
JSON 编码毫无意义。实际上,您要将 Int
转换为 String
.
这可以做得更简单
static func GetRoomVersionAndRemainingSeconds(auctionId: Int,completed: @escaping (ServiceResultDene<String>)->()){
var request = URLRequest(url: URL(string: WebServiceUrls.GetRoomVersionAndRemainingSeconds)!)
request.httpMethod = HTTPMethod.post.rawValue
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue(Util.cookie, forHTTPHeaderField: "Cookie")
request.httpBody = Data(String(auctionId).utf8)
Alamofire.request(request).responseJSON{response in
....
}
顺便说一下,错误的原因是JSONEncoder
不支持在iOS 13之前编码片段。
我正在尝试将一个整数值发送到带有正文的 WebService,所以我创建了一个这样的函数:
static func GetRoomVersionAndRemainingSeconds(auctionId:Int,completed:@escaping (ServiceResultDene<String>)->()){
var memberJson : String = ""
do{
let jsonEncoder = JSONEncoder()
let jsonData = try jsonEncoder.encode(auctionId)
memberJson = String(data: jsonData, encoding: String.Encoding.utf8)!
}catch{
print(error)
}
var request = URLRequest(url: URL(string: WebServiceUrls.GetRoomVersionAndRemainingSeconds)!)
request.httpMethod = HTTPMethod.post.rawValue
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue(Util.cookie, forHTTPHeaderField: "Cookie")
request.httpBody = (memberJson).data(using: .unicode)
Alamofire.request(request).responseJSON{response in
....
}
当我尝试上面的代码时,它完美地编码了 IOS 13+
上的整数值 -- memberJson is = "\"4\""
但是当我在 IOS 12.4
上尝试这个时它不编码并且 error.localizedDescription
returns : invalidValue(4, Swift.EncodingError.Context(codingPath: [], debugDescription: "Top-level Int encoded as number JSON fragment.", underlyingError: nil))
这里有什么问题?任何建议都可以是 good.Thanks
JSON 编码毫无意义。实际上,您要将 Int
转换为 String
.
这可以做得更简单
static func GetRoomVersionAndRemainingSeconds(auctionId: Int,completed: @escaping (ServiceResultDene<String>)->()){
var request = URLRequest(url: URL(string: WebServiceUrls.GetRoomVersionAndRemainingSeconds)!)
request.httpMethod = HTTPMethod.post.rawValue
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue(Util.cookie, forHTTPHeaderField: "Cookie")
request.httpBody = Data(String(auctionId).utf8)
Alamofire.request(request).responseJSON{response in
....
}
顺便说一下,错误的原因是JSONEncoder
不支持在iOS 13之前编码片段。