快速将Foundation和非基础类型序列化为JSON

问题描述

我正在尝试将两种不同类型的对象序列化为JSON,但是我只能使用JSONEncoder进行序列化,而使用JSONSerialization进行序列化。

一个是简单的Int,我将其序列化如下:

let ticket: [String:Any] = ["ticket": -1]
let ticketJson = try! JSONSerialization.data(withJSONObject: ticket)
let ticketJsonString = String(data: ticketJson,encoding: String.Encoding.utf8)

另一种对象类型是我创建的类,我将其序列化如下:

let encodedNotification = try! JSONEncoder().encode(notification)
let encodedNotificationJsonString = String(data: encodedNotification,encoding: String.Encoding.utf8)

理想情况下,我会使用以下字典一次将两个序列化:

let parameters: [String:Any] = ["ticket": -1,"notification": notification]

这可能吗?如果是这样,怎么办?我还没弄清楚。

谢谢!

解决方法

将值放入结构而不是[String: Any]中。

struct Parameters: Encodable {
    let ticket: Int
    let notification: Notification
}

let parameters = Parameters(ticket: -1,notification: notification)

let encoded = try JSONEncoder().encode(parameters)

通常,请避免在Swift中使用Any。正确使用这是一种非常困难的类型,并且在类型系统中不能很好地发挥作用。除了相当高级的代码外,它的出现主要是由于ObjC桥接(例如在JSONSerialization中,它是ObjC NSJSONSerialization的桥梁)。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...