1

如何将 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")

目前我尝试像这样创建一个 SwiftyJSONJSON对象,但它仍然需要我手动指定每个属性:

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 立即发送它?

4

2 回答 2

2

我遇到了同样的问题,但是我花了很长时间才发现这一点。

但是,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 的简洁功能。

于 2016-01-24T18:35:02.073 回答
1

来自Alamofire 文档

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 响应。

于 2015-01-19T13:40:35.497 回答