         }
     }
 
+    enum OrdinaryPropertyType {
+        case normal
+        case normalInArray
+        case optionalInArray
+    }
+
+    private func generateStructOrdinaryProperty(of _type: OrdinaryPropertyType,  with key: String, debug: Bool, level: Int, into string: inout String) {
+
+        switch _type {
+        case .normal:
+            if case .null(let optionalValue) = self {
+                indent(with: level, into: &string)
+                let type: String
+                if let value = optionalValue {
+                    type = "\(value.type)"
+                } else {
+                    type = "UnknownType"
+                }
+                string += "let \(key.coolie_lowerCamelCase) = info[\"\(key)\"] as? \(type)\n"
+            } else {
+                if isHyperString {
+                    indent(with: level, into: &string)
+                    string += "guard let \(key.coolie_lowerCamelCase)String = info[\"\(key)\"] as? String else { "
+                    string += debug ? "print(\"Not found url key: \(key)\"); return nil }\n" : "return nil }\n"
+                    indent(with: level, into: &string)
+                    string += "guard let \(key.coolie_lowerCamelCase) = URL(string: \(key.coolie_lowerCamelCase)String) else { "
+                    string += debug ? "print(\"Not generate url key: \(key)\"); return nil }\n" : "return nil }\n"
+                } else {
+                    indent(with: level, into: &string)
+                    string += "guard let \(key.coolie_lowerCamelCase) = info[\"\(key)\"] as? \(type) else { "
+                    string += debug ? "print(\"Not found key: \(key)\"); return nil }\n" : "return nil }\n"
+                }
+            }
+        case .normalInArray:
+            if isHyperString {
+                indent(with: level, into: &string)
+                string += "222guard let \(key.coolie_lowerCamelCase)Strings = info[\"\(key)\"] as? [String] else { "
+                string += debug ? "print(\"Not found url key: \(key)\"); return nil }\n" : "return nil }\n"
+                indent(with: level, into: &string)
+                string += "let \(key.coolie_lowerCamelCase) = \(key.coolie_lowerCamelCase)Strings.map({ URL(string: $0) }).flatMap({ $0 })"
+            } else {
+                indent(with: level, into: &string)
+                string += "guard let \(key.coolie_lowerCamelCase) = info[\"\(key)\"] as? [\(type)] else { "
+                string += debug ? "print(\"Not found key: \(key)\"); return nil }\n" : "return nil }\n"
+            }
+        case .optionalInArray:
+            if isHyperString {
+                indent(with: level, into: &string)
+                string += "guard let \(key.coolie_lowerCamelCase)Strings = info[\"\(key)\"] as? [String?] else { "
+                string += debug ? "print(\"Not found url key: \(key)\"); return nil }\n" : "return nil }\n"
+                indent(with: level, into: &string)
+                string += "let \(key.coolie_lowerCamelCase) = \(key.coolie_lowerCamelCase)Strings.map({ $0.flatMap({ URL(string: $0) })"
+            } else {
+                indent(with: level, into: &string)
+                string += "guard let \(key.coolie_lowerCamelCase) = info[\"\(key)\"] as? [\(type)?] else { "
+                string += debug ? "print(\"Not generate array key: \(key)\"); return nil }\n" : "return nil }\n"
+            }
+        }
+    }
+
+    /*
     private func generateStructOrdinaryProperty(with key: String, debug: Bool, level: Int, into string: inout String) {
         if case .null(let optionalValue) = self {
             indent(with: level, into: &string)

                            string += "let \(key.coolie_lowerCamelCase) = \(key.coolie_lowerCamelCase)JSONArray.map({ $0.flatMap({ \(key.capitalized.coolie_dropLastCharacter)(\(trueArgumentLabel)$0) }) })\n"
                        }
                    } else {
                        value.generateStructOrdinaryProperty(with: key, debug: debug, level: level, into: &string)
                    }
                } else {
                    indent(with: level, into: &string)

                generateStructArrayProperty(with: key, jsonDictionaryName: jsonDictionaryName, constructorName: constructorName, trueArgumentLabel: trueArgumentLabel, debug: debug, level: level + 2, into: &string)
            }
        } else {
            generateStructOrdinaryProperty(of: .normal, with: key, debug: debug, level: level + 2, into: &string)
        }
    }

