Swift 到 JSON 中的序列化、反序列化

Serialization, Desiarilazation in Swift to JSON

所以,几天来我一直在阅读大量关于这个主题的 material。除了少数问题,我已经解决了大部分问题。这些是: 1)如何将自定义字典classes序列化为JSON,(考虑到每个class都是可序列化的) 2) 如何反序列化JSON,这是一个包含Dictionary 的Dictionary 到实际的Dictionary,前提是UserObject 单独可以被序列化。

对于序列化,我使用这个协议: https://gist.github.com/anaimi/ad336b44d718430195f8#file-serializable-swift

对于反序列化,我只是从 json 中提取值。它适用于所有基元和自定义类型,但我不知道如何反序列化自定义类型的集合。

例如,这是我的序列化代码:

@objc var jsonProperties:Array<String> {
    get {
        return ["id","login","password","name","picture","reputation","description","gender","x","y","visibility","friendRequests","friendWeightings","interestWeightings"]
    }
}
@objc func valueForKey(key: String!) -> AnyObject! {
    if key == "id" {
        return self.id
    } else if key == "login" {
        return self.login
    } else if key == "password" {
        return self.password
    } else if key == "name" {
        return self.name
    }
}

等等...

这就是我反序列化同一个对象的方式: 初始化(){}

init(json: JSON) {
    if let i = json["id"].string {
        self.id = i
    }
    if let l = json["login"].string {
        self.login = l
    }
    if let f: Array<String> = json["someArray"].arrayObject as? [String] {
        self.friendRequests = f
    }
    if let f = json["someDictionary"].dictionaryObject as? Dictionary<String,Float> {
        self.friendWeightings = f
    }
}

当我尝试序列化或反序列化 class

的集合(如数组或字典)时出现问题

有人以前遇到过这个问题吗?

此外,我认为 Serializable 协议不能正确序列化 NON-Primitive 类型的字典。我还没有研究过。

总之,重点是: 有没有一个很好的库,它可以处理我发送的任何数据的所有 serialization/deserialization,或者如果没有这样的东西,那么将 serialize/deserialize 自定义类型集合 json 的方法是什么。

谢谢。

所以我终于找到了解决办法。我将 JSONModel 连接到我的 swift 项目。它正确地完成了从 JSON 到 JSON 的所有序列化。唯一剩下的就是向 类 添加序列化和反序列化。没有什么棘手的,如果让代码编写很多机械工作。字典很棘手,首先我检查字典是否存在,然后我将每个键记下到我的字典中,但对于值,我需要将 JSONModel 类型转换为我的类型。无论如何,我似乎实现了我想要的一切,尽管 Apple 应该直截了当并编写高质量级别的 json 库。