轻松将对象序列化为 JSON
Posted
技术标签:
【中文标题】轻松将对象序列化为 JSON【英文标题】:Easily serialize an object to JSON 【发布时间】:2015-01-19 13:31:12 【问题描述】:如何将 Swift 对象序列化为 JSON,例如以下对象:
class Order
var id:Int
var title:String
var email:String
init(id:Int, title:String, email:String)
self.id = id
self.title = title
self.email = email
let order = Order(id:345, title:"Title", email:"email@gmail.com")
目前我尝试像这样创建一个 SwiftyJSON JSON
对象,但它仍然需要我手动指定每个属性:
let json = JSON()
json["id"] = order.id
json["title"] = order.title
json["email"] = order.email
此外,这对我没有帮助,因为 Alamofire 不理解 SwiftyJSON 的对象,需要我手动创建字典:
let dict:[String, AnyObject] = [
"id":order.id,
"title":order.title,
"email":order.email
]
Alamofire.request(.POST, Configuration.ADD_ORDER_URL, parameters: dict, encoding:.JSON)
回顾一下,如何将对象序列化为 JSON 并使用 Alamofire 立即发送?
【问题讨论】:
看看this code,它可以帮助您将对象序列化为JSON。 我已将您的问题编辑得更清楚一些,如果您不同意,请随时回滚编辑。 【参考方案1】:我遇到了同样的问题,但是我花了很长时间才发现这个问题。
但是,user2629998 的响应是正确的。在 OP 的情况下,他使用的是字典,所以他需要这样声明:
let parameters:[String : AnyObject] = []
另外,你必须声明标题
let headers = ["Content-Type": "application/json"]
稍后必须传递给 alamofire 请求
Alamofire.request(.POST, yourEndpoint, headers:headers, parameters: parameters, encoding: .JSON)
我决定详细说明 user2629998,因为标题可以产生影响。
另外,我想指出,这对于许多用户来说可能是不直观的,正如我在搜索有关此问题或类似问题的不同问题时注意到的那样。为什么?因为即使你想发送 JSON,你也不能在 Alamofire 中这样做。所以基本上,Alamofire 会在后台处理它。因此,您不得不发送字典并使用 Alamofire 的简洁功能。
【讨论】:
【参考方案2】:来自Alamofire documentation:
let parameters = [
"foo": [1,2,3],
"bar": [
"baz": "qux"
]
]
Alamofire.request(.POST, "http://httpbin.org/post", parameters: parameters, encoding: .JSON)
您创建一个表示您的 JSON 的数组,然后将 encoding
参数设置为 Alamofire.JSON
。 SwiftyJSON 与这里无关,因为它只处理反序列化 JSON 响应。
【讨论】:
以上是关于轻松将对象序列化为 JSON的主要内容,如果未能解决你的问题,请参考以下文章