如何使用 alamofire 传递包含模型对象数组的复杂字典?

How to pass complex dictionary which contains array of model objects with alamofire?

我需要在我的 Alamofire 请求中传递以下参数

{"order":{"student_id":"1483","restaurant_id":1,"quantity":1,"total_amount":90.0,"total_discount":0.0},"items":[{"item_id":"1","offer":"0.0","price":"90.0","quantity":"1"},{"item_id":"1","offer":"0.0","price":"90.0","quantity":"1"},{"item_id":"1","offer":"0.0","price":"90.0","quantity":"1"}]}

以下是我的Alamofire发送参数的代码

let parameters = ["order": ["student_id": MY_USERID!, "restaurant_id": restaurantId,
                                    "quantity":foodCartList.count,
                                    "total_amount": totalPrice,
                                    "total_discount": totalOffer],
                          "items": submitItems
            ] as [String : Any]

        var request = URLRequest(url: URL(string: "MY_URL")!)
        request.httpMethod = "POST"
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = try! JSONSerialization.data(withJSONObject: parameters)


        Alamofire.request(request).responseJSON { (response) in
            if let error = response.result.error {
                debugPrint(error.localizedDescription)
                hideARSProgress()
                return
            }.....

对于名为submitItems的参数,我创建了一个模型class如下

class SubmitItems {
    var item_id: String?=nil
    var quantity: String?=nil
    var price: String? = nil
    var offer: String? = nil

    init(item_id: String,quantity: String,price: String,offer: String) {
        self.item_id = item_id
        self.quantity = quantity
        self.price = price
        self.offer = offer
    }
}

然后创建了上面的数组 class 调用 submitItems 并向其中添加了一些项目。

为整个数据层次结构创建结构(不是 类)并使用 Encodable

对数据进行编码
struct Parameters: Encodable {
    let order: Order
    let items: [Item]
}

struct Item: Encodable {
    let item_id, offer, price, quantity: String
}

struct Order: Encodable {
    let student_id: String
    let restaurant_id, quantity : Int
    let total_amount, total_discount: Double
}

let order = Order(student_id: "1483", restaurant_id: 1, quantity: 1, total_amount: 90.0, total_discount: 0.0)
let items = [Item(item_id: "1", offer: "0.0", price: "90.0", quantity: "1"),
             Item(item_id: "1", offer: "0.0", price: "90.0", quantity: "1"),
             Item(item_id: "1", offer: "0.0", price: "90.0", quantity: "1")]
let parameters = Parameters(order: order, items: items)

request.httpBody = try! JSONEncoder().encode(parameters)