如何使用Alamofire发送自定义OrderModel类对象列表?
如何将自定义OrderModel类转换为指定格式的JSON数据
没问题,我来帮你搞定这个需求!核心是要解决模型属性名和JSON键名的映射问题,同时把模型数组包装在order_model这个顶层键下。下面用Swift原生的Codable协议来实现,这是最简洁且无第三方依赖的方案:
1. 修改OrderModel类,遵循Codable并自定义键映射
首先让你的OrderModel遵循Codable协议,然后通过CodingKeys枚举来指定每个属性对应JSON里的键名,完美匹配你要的格式:
class OrderModel: Codable { var mId: String? var productCode: String? var orderQty: Int? var productRate: Int? var requiredOn: String? var orderAddress: String? var remarks: String? var productTitle: String? // 注意你原代码里的`productTtitle`是笔误,这里修正为`productTitle` var orderAmount: Int? var branchId: String? // 自定义属性与JSON键的映射关系 enum CodingKeys: String, CodingKey { case mId = "m_id" case productCode = "Product_code" case orderQty = "Order_qty" case productRate = "Product_rate" case orderAmount = "Order_amount" case requiredOn = "Required_on" case branchId = "branch_id" case orderAddress = "Order_Address" case remarks = "Remarks" // 如果后端不需要`productTitle`字段,这里可以不用添加,序列化时会自动忽略 } }
2. 创建包装类,匹配顶层JSON结构
因为你要的JSON外层是order_model键,对应一个模型数组,所以我们需要一个包装结构体来对应这个顶层结构:
struct OrderRequest: Codable { let order_model: [OrderModel] }
3. 序列化模型为JSON数据
接下来创建模型实例,包装成OrderRequest,再通过JSONEncoder转成JSON数据(或字符串):
// 构建第一个订单实例 let order1 = OrderModel() order1.mId = "121212" order1.productCode = "000001" order1.orderQty = 2 order1.productRate = 100 order1.orderAmount = 200 order1.requiredOn = "2018-02-01T12:32:33.8550337+05:00" order1.branchId = "1701001" order1.orderAddress = "address" order1.remarks = "rem" // 构建第二个订单实例 let order2 = OrderModel() order2.mId = "12234334" order2.productCode = "000002" order2.orderQty = 1 order2.productRate = 100 order2.orderAmount = 100 order2.requiredOn = "2018-02-01T12:32:33.8550337+05:00" order2.branchId = "1701001" order2.orderAddress = "address" order2.remarks = "rem" // 包装成顶层请求结构 let orderRequest = OrderRequest(order_model: [order1, order2]) // 序列化转JSON数据 do { let jsonData = try JSONEncoder().encode(orderRequest) // 可选:转成字符串查看结果 if let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString) } // 之后就可以把jsonData通过网络请求发送给后端了 } catch { print("JSON编码失败:\(error.localizedDescription)") }
额外提示
- 如果你的
requiredOn字段是Date类型而非String,可以给JSONEncoder设置日期编码策略来匹配后端格式:let encoder = JSONEncoder() let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ" encoder.dateEncodingStrategy = .formatted(dateFormatter) let jsonData = try encoder.encode(orderRequest) - 如果你习惯用第三方库(比如Alamofire、ObjectMapper),也可以用类似的属性映射方式实现,但
Codable是Swift原生支持的,无需额外引入依赖,更推荐使用。
内容的提问来源于stack exchange,提问作者Mujahid Latif
相关产品推荐
相关产品推荐

