/// <summary>
        /// Returns string representation of item.
        /// </summary>
        /// <returns></returns>
        public string ToDidl()
        {
            ArrayList properties = new ArrayList();

            StringBuilder sb        = null;
            StringWriter  sw        = null;
            MemoryStream  ms        = null;
            XmlTextWriter xmlWriter = null;

            if (MediaObject.ENCODE_UTF8)
            {
                ms        = new MemoryStream(MediaObject.XML_BUFFER_SIZE);
                xmlWriter = new XmlTextWriter(ms, System.Text.Encoding.UTF8);
            }
            else
            {
                sb        = new StringBuilder(MediaObject.XML_BUFFER_SIZE);
                sw        = new StringWriter(sb);
                xmlWriter = new XmlTextWriter(sw);
            }

            xmlWriter.Formatting = System.Xml.Formatting.Indented;
            xmlWriter.Namespaces = true;
            xmlWriter.WriteStartDocument();

            MediaObject.WriteResponseHeader(xmlWriter);

            ToXmlData _d = (ToXmlData)MediaObject.ToXmlData_AllRecurse.Clone();

            _d.IsRecursive = false;
            this.ToXml(ToXmlFormatter.DefaultFormatter, _d, xmlWriter);

            xmlWriter.WriteEndDocument();
            xmlWriter.Flush();

            string xmlResult;

            if (MediaObject.ENCODE_UTF8)
            {
                int          len   = (int)ms.ToArray().Length - MediaObject.TruncateLength_UTF8;
                UTF8Encoding utf8e = new UTF8Encoding(false, true);
                xmlResult = utf8e.GetString(ms.ToArray(), MediaObject.TruncateLength_UTF8, len);
            }
            else
            {
                xmlResult = sb.ToString();
            }
            xmlWriter.Close();

            int crpos = xmlResult.IndexOf("\r\n");

            crpos = xmlResult.IndexOf('<', crpos);
            string trunc = xmlResult.Remove(0, crpos);

            return(trunc);
        }