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 库。
所以,几天来我一直在阅读大量关于这个主题的 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 库。