加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift json的序列化和反序列化

发布时间:2020-12-14 06:53:11 所属栏目:百科 来源:网络整理
导读: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 dicnary
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读