             return url
         } else if type == Decimal.self || type == NSDecimalNumber.self {
             return try self.unbox(value, as: Decimal.self)
-        } else if let stringKeyedDictType = type as? _JSONStringDictionaryMarker.Type {
+        } else if let stringKeyedDictType = type as? _JSONStringDictionaryDecodableMarker.Type {
             return try self.unbox(value, as: stringKeyedDictType)
         } else {
             self.storage.push(container: value)

        }
    }

    fileprivate func unbox<T>(_ value: Any, as type: _JSONStringDictionaryMarker.Type) throws -> T? {
        var result = [String : Any]()
        guard let dict = value as? NSDictionary else {
            throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value)

        } else if type == Decimal.self || type == NSDecimalNumber.self {
            // JSONSerialization can natively handle NSDecimalNumber.
            return (value as! NSDecimalNumber)
        } else if type is _JSONStringDictionaryEncodableMarker {
            return self.box(value as! Dictionary<String, Encodable>)
        }

