How to convert a Swift object to a dictionary

I must disagree with @Darko.

In Swift 2,

use protocol oriented programming and the simple reflection offered by Mirror class :

protocol JSONAble {}

extension JSONAble {
    func toDict() -> [String:Any] {
        var dict = [String:Any]()
        let otherSelf = Mirror(reflecting: self)
        for child in otherSelf.children {
            if let key = child.label {
                dict[key] = child.value
            }
        }
        return dict
    }
}

then you can use this protocol with your request class and produce the desired dictionary :

class JsonRequest : JSONAble {
    var param1 : String?
    // ...
}

let request = JsonRequest()
// set params of the request
let dict = request.toDict()
// use your dict

Swift currently does not support advanced reflection like Java or C# so the answer is: no, there is not an equally easy and automated way with pure Swift.

[Update] Swift 4 has meanwhile the Codable protocol which allows serializing to/from JSON and PLIST.

typealias Codable = Decodable & Encodable

My solution to this will be something like this:

extension Encodable {

    var dict : [String: Any]? {
        guard let data = try? JSONEncoder().encode(self) else { return nil }
        guard let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String:Any] else { return nil }
        return json
    }
}

and usage will be something like this:

movies.compactMap { $0.dict }