         }
     }
     
-    //display property name and value friendly
+    /// 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)"
             }
-            desc += ", "
         }
         return desc
     }
 
-    //convert Model to JSON object
+    /// convert Model to JSON object
     open func json() -> [String: Any] {
         var dictionary = [String: Any]()
         for info in type(of: self).propertyInfos() {

        return dictionary
    }
    
    //convert Model to JSON data
    public func jsonData(options: JSONSerialization.WritingOptions = []) -> Data? {
        return try? JSONSerialization.data(withJSONObject: json(), options: options)
    }
    
    //convert Model to JSON string
    public func jsonString(options: JSONSerialization.WritingOptions = []) -> String? {
        if let data = jsonData(options: options) {
            return String(data: data, encoding: .utf8)

        var infos: [PropertyInfo] = []
        var count: UInt32 = 0
        if let properties = class_copyPropertyList(self, &count) {
//            print("--------- properties count", count)
            for i in 0..<Int(count) {
                var info = PropertyInfo()
                let property = properties[i]
