/// <summary>
        /// Converts the contents of a merged XML element to the appropriate Oracle representation.
        /// </summary>
        /// <param name="xml"></param>
        /// <returns></returns>
        static object DeserializeAttribute(OracleObjectTypeAttribute metadata, XElement xml)
        {
            if (xml == null)
            {
                return(null);
            }

            if (metadata.DbType != null)
            {
                return(DeserializeOracleDbTypeFromXmlValue((OracleDbType)metadata.DbType, xml.Value));
            }
            else
            {
                throw new NotImplementedException("Cannot deserialize UDT attribute of non-OracleDbType.");
            }
        }
        /// <summary>
        /// Serializes the specified attribute and attribute value.
        /// </summary>
        /// <param name="attribute"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        static XElement SerializeAttribute(OracleObjectTypeAttribute attribute, object value)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }
            if (attribute == null)
            {
                throw new ArgumentNullException(nameof(attribute));
            }

            if (attribute.DbType != null)
            {
                return(SerializeOracleDbType(attribute.Name, (OracleDbType)attribute.DbType, value));
            }
            else
            {
                throw new NotImplementedException("Cannot serialize UDT attribute of non-OracleDbType.");
            }
        }