         }
     }
     
+    //MARK: - Misc
+
     /// convenience to get property key's according json key
     public func jsonKey(_ propertyKey: String) -> String {
         return type(of: self).jsonKey(propertyKey)
     }
+    
+    /// display property name and value friendly
+    override open var description: String {
+        let selfClass = type(of: self)
+        var desc = "|\(selfClass)| "
+        for info in selfClass.propertyInfos() {
+            desc += ", "
+            desc += info.propertyKey + ": "
+            if let propertyValue = value(forKey: info.propertyKey) {
+                desc += "\(propertyValue)"
+            } else {
+                desc += "nil"
+            }
+        }
+        return desc
+    }
 }
 

        }
    }
    
    /// display property name and value friendly
    override open var description: String {
        let selfClass = type(of: self)
        var desc = "|\(selfClass)| "
        for info in selfClass.propertyInfos() {
            desc += ", "
            desc += info.propertyKey + ": "
            if let propertyValue = value(forKey: info.propertyKey) {
                desc += "\(propertyValue)"
            } else {
                desc += "nil"
            }
        }
        return desc
    }

    /// convert Model to JSON object
    open func json() -> [String: Any] {
        var dictionary = [String: Any]()

// if you really wannna declare an instance of optional struct type such as Int?, 
// you must initiate it by yourself（override Model.init(json:) and write your own parsing statements）


//NSCoding
open class Model: NSObject {
    struct PropertyAttributes {
        static let keyType = "T"
