protocol yson{
func dicnarySerializer() -> AnyObject?
func deserializer(jsonstring:String?) -> Bool
func serialization() -> String?
func deserialization(string:String) -> Bool
func deserialization(json:JSON) -> Bool
}
extension yson{
func dicnarySerializer() -> AnyObject?{
let mirror = Mirror(reflecting: self)
if mirror.children.count > 0 {
var result: [String:AnyObject] = [:]
for case let (label?, value) in mirror.children {
if let jsonValue = value as? yson {
result[label] = jsonValue.dicnarySerializer()
}
}
return result
}
return self as? AnyObject
}
func serialization() -> String?{
let json_object = self.dicnarySerializer()
let data : NSData! = try? NSJSONSerialization.dataWithJSONObject(json_object!,
options: [])
let str = NSString(data:data, encoding: NSUTF8StringEncoding)
return str as String?
}
func deserialization(string:String) -> Bool{
if let json :JSON = string.fileStringToJson(){
return deserialization(json)
}
return false
}
func deserialization(json:JSON)-> Bool{
let mirror = Mirror(reflecting: self)
if mirror.children.count > 0 {
for case let (label?, _) in mirror.children {
if(!self.deserialization(json[label])){
return false
}
}
}else{//base type
if(!self.deserializer(json.string)){
return false
}
}
return true
}
func deserializer(jsonstring:String?) -> Bool{
return false
}
}
extension Optional:yson{
func dicnarySerializer() -> AnyObject? {
if let obj = self{
if let value = obj as? yson{
return value.dicnarySerializer()
}
}
return nil
}
}
extension NSDate :yson{
func dicnarySerializer() -> AnyObject? {
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy年MM月dd日 HH:mm:ss"
let str = formatter.stringFromDate(self)
return str
}
}
extension String: yson {
mutating func deserializer(string:String){
self = string
}
}
extension Int64: yson {
mutating func deserializer(string:String){
if let int64 = string.toInt64(){
self = int64
}
}
}
extension Int: yson {
mutating func deserializer(string:String){
if let inttt:Int = (string as NSString).integerValue{
self = inttt
}
}
}
extension Bool: yson {
mutating func deserializer(string:String){
if let inttt:Bool = (string as NSString).boolValue{
self = inttt
}
}
}
extension Dictionary: yson {}
extension Array: yson { }
extension Set:yson { }
还有一点东西没写完,权作笔记
参考:http://www.hangge.com/blog/cache/detail_983.html