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

标签 ios json swift serialization deserialization

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

对于序列化,我使用这个协议(protocol): 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
    }
}

当我尝试序列化或反序列化该类的集合(如数组或字典)时出现问题

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

此外,我不认为 Serializable 协议(protocol)可以正确序列化 NON-Primitive 类型的字典。我还没有调查过。

无论如何,重点是: 是否有一个很好的库,它对我发送的任何数据进行所有序列化/反序列化,或者如果没有这样的东西,将自定义类型的集合序列化/反序列化为 json 的方法是什么。

谢谢。

最佳答案

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

关于ios - Swift 中的序列化、反序列化到 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29872639/

相关文章:

Javascript 小部件在我自己的域上工作正常,但在其他人的域上却不行?

java - jackson @JsonPropertyOrder 被忽略

ios - Swift 中的泛型和 EXC_BAD_ACCESS

swift - 扩展 NSLayoutAnchor 编译错误

ios - 当应用程序处于事件状态时,不会在我的 View Controller 中调用 viewWillAppear

ios - 带方角的 UISegmentedControl

ios - 我怎样才能得到真正的 'self' ,哪个节点运行 SKaction 序列

javascript - 在 JSON 请求中发送 csrf token (不是 ajax)

ios - Swift 中 block 的语法

ios - NSURLConnection 完成时出现错误 1200,现在是 1202?