【问题标题】:Easily serialize an object to JSON轻松将对象序列化为 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。
  • 我已将您的问题编辑得更清楚一些,如果您不同意,请随时回滚编辑。

标签: json swift alamofire swifty-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 响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 2016-12-22
      • 2018-07-20
      • 2021-12-16
      相关资源
      最近更新 更多