示例#1
0
        /// <summary>
        /// Serializa un objeto Envelop en un xml.
        /// </summary>
        /// <param name="envelope">Sobre a enviar.</param>
        /// <param name="ns">Espacio de nombres.</param>
        /// <param name="nsSum">Espacio de nombres para suministro de
        /// información (a veces prefijo sii, otras prefijo sum).</param>
        /// <returns>XML resultado de la serialización.</returns>
        public static string GetXmlText(Envelope envelope, SIINamespaces ns = SIINamespaces.siiLR, SIINamespaces nsSum = SIINamespaces.sii)
        {
            ClearNulls(envelope);             // Limpia nulos

            XmlDocument xmlDocument = new XmlDocument();

            XmlSerializer           xmlSerializer = new XmlSerializer(envelope.GetType());
            XmlSerializerNamespaces namespaces    = new XmlSerializerNamespaces();

            namespaces.Add("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
            namespaces.Add(ns.ToString(), Namespaces[ns]);
            namespaces.Add(nsSum.ToString(), Namespaces[nsSum]);

            byte[] buff = null;

            using (var ms = new MemoryStream())
            {
                using (StreamWriter sw = new StreamWriter(ms, Encoding.GetEncoding("UTF-8")))
                {
                    xmlSerializer.Serialize(sw, envelope, namespaces);
                    buff = ms.ToArray();
                }
            }

            return(Encoding.UTF8.GetString(buff));
        }
示例#2
0
        /// <summary>
        /// Serializa un objeto Envelop en un xml, y guarda el
        /// resultado en la ruta especificada.
        /// </summary>
        /// <param name="envelope">Sobre a enviar.</param>
        /// <param name="xmlPath">Ruta del xml.</param>
        /// <param name="ns">Espacio de nombres.</param>
        /// <param name="nsSum">Espacio de nombres para suministro de
        /// información (a veces prefijo sii, otras prefijo sum).</param>
        /// <returns>XmlDocument resultado de la serialización.</returns>
        public static XmlDocument GetXml(Envelope envelope, string xmlPath, SIINamespaces ns = SIINamespaces.siiLR, SIINamespaces nsSum = SIINamespaces.sii)
        {
            ClearNulls(envelope);             // Limpia nulos

            XmlDocument xmlDocument = new XmlDocument();

            XmlSerializer           xmlSerializer = new XmlSerializer(envelope.GetType());
            XmlSerializerNamespaces namespaces    = new XmlSerializerNamespaces();

            namespaces.Add("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
            namespaces.Add(ns.ToString(), Namespaces[ns]);
            namespaces.Add(nsSum.ToString(), Namespaces[nsSum]);

            using (StreamWriter sw = new StreamWriter(xmlPath, false, Encoding.GetEncoding("UTF-8")))
            {
                xmlSerializer.Serialize(sw, envelope, namespaces);
            }

            xmlDocument.Load(xmlPath);

            return(xmlDocument);
        }
示例#3
0
        /// <summary>
        /// Devuelve una cadena con el envelope representado
        /// en xml en formato binario con codificaión UTF8.
        /// </summary>
        /// <returns>Envelope en xml en binario con codificaión UTF8.</returns>
        public byte[] ToArray(SIINamespaces ns = SIINamespaces.siiLR, SIINamespaces nsSum = SIINamespaces.sii)
        {
            byte[] result = null;

            SIIParser.ClearNulls(this); // Limpia nulos

            XmlSerializer           xmlSerializer = new XmlSerializer(GetType());
            XmlSerializerNamespaces namespaces    = new XmlSerializerNamespaces();

            namespaces.Add("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
            namespaces.Add(ns.ToString(), SIIParser.Namespaces[ns]);
            namespaces.Add(nsSum.ToString(), SIIParser.Namespaces[nsSum]);

            var ms = new MemoryStream();

            using (StreamWriter sw = new StreamWriter(ms, Encoding.GetEncoding("UTF-8")))
            {
                xmlSerializer.Serialize(sw, this, namespaces);
                result = ms.ToArray();
            }

            return(result);
        }