【问题标题】:Serialization, Desiarilazation in Swift to JSON序列化,将 Swift 中的 Desiarilazation 转换为 JSON
【发布时间】:2015-04-26 01:22:30
【问题描述】:

所以,我已经阅读了大量关于这个主题的材料已经好几天了。除了少数问题,我已经解决了大部分问题。这些是: 1)如何将自定义类的字典序列化为JSON,(考虑到每个类都是可序列化的) 2)如何将包含字典的JSON反序列化为实际的字典,前提是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
    }
}

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

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

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

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

谢谢。

【问题讨论】:

标签: ios json swift serialization deserialization


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    HandyJSON 是另一种为您处理 JSON 的选项。

    它直接将 JSON 反序列化为对象。无需指定映射关系,无需继承NSObject。只需定义您的纯 swift 类/结构,并对其进行反序列化 JSON。

    类动物:HandyJSON { 变量名称:字符串? 变量 id:字符串? 变量编号:整数? 需要初始化(){} } 让 jsonString = "{\"name\":\"cat\",\"id\":\"12345\",\"num\":180}" 如果让动物 = JSONDeserializer.deserializeFrom(jsonString) { 打印(动物) }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 2019-07-03
      • 2020-12-10
      • 1970-01-01
      • 2015-01-06
      相关资源
      最近更新 更多