 		case .rangeValue(let val):
 			result = CNTextLine(string: val.description)
 		case .pointValue(let val):
-			result = CNTextLine(string: "(x:\(val.x), y:\(val.y))")
+			result = CNTextLine(string: "{x:\(val.x), y:\(val.y)}")
 		case .sizeValue(let val):
-			result = CNTextLine(string: "(w:\(val.width), h:\(val.height))")
+			result = CNTextLine(string: "{width:\(val.width), height:\(val.height)}")
 		case .rectValue(let val):
-			let ptstr = "(x:\(val.origin.x), y:\(val.origin.y))"
-			let szstr = "(w:\(val.size.width), h:\(val.size.height))"
-			result = CNTextLine(string: "(" + ptstr + ", " + szstr + ")")
+			let ptstr = "origin:{x:\(val.origin.x), y:\(val.origin.y)}"
+			let szstr = "size:{width:\(val.size.width), height:\(val.size.height)}"
+			result = CNTextLine(string: "{" + ptstr + ", " + szstr + "}")
 		case .dictionaryValue(let val):
 			let sect = CNTextSection()
 			sect.header = "{" ; sect.footer = "}"

		} else if let val = obj as? CGRect {
			result = .rectValue(val)
		} else if let val = obj as? Dictionary<String, Any> {
			result = dictionaryToValue(dictionary: val)
		} else if let val = obj as? Array<Any> {
			result = arrayToValue(array: val)
		} else if let val = obj as? NSObject {
			result = .objectValue(val)
		} else {
			result = nil
		}
		return result
	}

	private static func dictionaryToValue(dictionary value: Dictionary<String, Any> ) -> CNNativeValue? {
		var result: Dictionary<String, CNNativeValue> = [:]
		for (key, elm) in value {
			if let child = anyToValue(object: elm) {
				result[key] = child
			} else {
				NSLog("Invalid object at \(#function)")
			}
		}
		return .dictionaryValue(result)
	}

	private static func arrayToValue(array value: Array<Any>) -> CNNativeValue? {
		var result: Array<CNNativeValue> = []
		for elm in value {
			if let child = anyToValue(object: elm) {
				result.append(child)
			} else {
				NSLog("Invalid object at \(#function)")
			}
		}
		return .arrayValue(result)
	}
}

	case arrayValue(_ val: Array<CNNativeValue>)
	case objectValue(_ val: NSObject)

	public func toNumber() -> NSNumber? {
		let result: NSNumber?
		switch self {
		case .numberValue(let obj):	result = obj
		default:			result = nil
		}
		return result
	}

	public func toString() -> String? {
		let result: String?
		switch self {
		case .stringValue(let obj):	result = obj
		default:			result = nil
		}
		return result
	}

	public func toDate() -> Date? {
		let result: Date?
		switch self {
		case .dateValue(let obj):	result = obj
		default:			result = nil
		}
		return result
	}

	public func toRange() -> NSRange? {
		let result: NSRange?
		switch self {
		case .rangeValue(let obj):	result = obj
		default:			result = nil
		}
		return result
	}

	public func toPoint() -> CGPoint? {
		let result: CGPoint?
		switch self {
		case .pointValue(let obj):	result = obj
		default:			result = nil
		}
		return result
	}

	public func toSize() -> CGSize? {
		let result: CGSize?
		switch self {
		case .sizeValue(let obj):	result = obj
		default:			result = nil
		}
		return result
	}

	public func toRect() -> CGRect? {
		let result: CGRect?
		switch self {
		case .rectValue(let obj):	result = obj
		default:			result = nil
		}
		return result
	}

	public func toDictionary() -> Dictionary<String, CNNativeValue>? {
		let result: Dictionary<String, CNNativeValue>?
		switch self {
		case .dictionaryValue(let obj):	result = obj
		default:			result = nil
		}
		return result
	}

	public func toArray() -> Array<CNNativeValue>? {
		let result: Array<CNNativeValue>?
		switch self {
		case .arrayValue(let obj):	result = obj
		default:			result = nil
		}
		return result
	}

	public func toObject() -> NSObject? {
		let result: NSObject?
		switch self {
		case .objectValue(let obj):	result = obj
		default:			result = nil
		}
		return result
	}

	public func numberProperty(identifier ident: String) -> NSNumber? {
		if let elm = valueProperty(identifier: ident){
			return elm.toNumber()
		} else {
			return nil
		}
	}

	public func stringProperty(identifier ident: String) -> String? {
		if let elm = valueProperty(identifier: ident){
			return elm.toString()
		} else {
			return nil
		}
	}

	public func dateProperty(identifier ident: String) -> Date? {
		if let elm = valueProperty(identifier: ident){
			return elm.toDate()
		} else {
			return nil
		}
	}

	public func rangeProperty(identifier ident: String) -> NSRange? {
		if let elm = valueProperty(identifier: ident){
			return elm.toRange()
		} else {
			return nil
		}
	}

	public func pointProperty(identifier ident: String) -> CGPoint? {
		if let elm = valueProperty(identifier: ident){
			return elm.toPoint()
		} else {
			return nil
		}
	}

	public func sizeProperty(identifier ident: String) -> CGSize? {
		if let elm = valueProperty(identifier: ident){
			return elm.toSize()
		} else {
			return nil
		}
	}

	public func rectProperty(identifier ident: String) -> CGRect? {
		if let elm = valueProperty(identifier: ident){
			return elm.toRect()
		} else {
			return nil
		}
	}

	public func dictionaryProperty(identifier ident: String) -> Dictionary<String, CNNativeValue>? {
		if let elm = valueProperty(identifier: ident){
			return elm.toDictionary()
		} else {
			return nil
		}
	}

	public func arrayProperty(identifier ident: String) -> Array<CNNativeValue>? {
		if let elm = valueProperty(identifier: ident){
			return elm.toArray()
		} else {
			return nil
		}
	}

	public func objectProperty(identifier ident: String) -> NSObject? {
		if let elm = valueProperty(identifier: ident){
			return elm.toObject()
		} else {
			return nil
		}
	}

	public func valueProperty(identifier ident: String) -> CNNativeValue? {
		let result: CNNativeValue?
		switch self {
		case .dictionaryValue(let dict):
			result = dict[ident]
		default:
			result = nil
		}
		return result
	}

	private func propertyCount() -> Int? {
		let result: Int?
		switch self {
		case .dictionaryValue(let dict):
			result = dict.count
		default:
			result = nil
		}
