none
Web Appi - Serializar xml UTF-16 RRS feed

  • Pregunta

  • Saludos, actualmente me encuentro en la  creación de un  servicio web que recibe xml y Json dentro de los encabezados, por lo que tengo algunos Endpoints que de igual manera, retornan xml y json.

    Mi problema está cuando la entrada de mi xml tiene como encabezado un UTF-16, encabezado que no puede ser cambiado por exigencias del cliente.

    Ejemplo 

    Web Api .NET FRAMEWORK

            [HttpPost]
            public async Task<IHttpActionResult> RegisterNewDocument(DocumentElement model)
            {
                return Content(HttpStatusCode.OK, new { data="correcto"}, Configuration.Formatters.XmlFormatter);
    
    
            }

    XML 

    Con este funciona correctamente

    "<?xml version="1.0" encoding="utf-8"?>
    <DocumentElement xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <DatosGenerales>
        <Estado>0</Estado>
        <ProcedenciaCodigo>412-14</ProcedenciaCodigo>
        <ProcedenciaNombre>procede</ProcedenciaNombre>
        <EntroUrgencia>1</EntroUrgencia>
        <AreaServicioCodigo>ABC123</AreaServicioCodigo>
        <AreaServicioNombre>OTHER</AreaServicioNombre>
        <IpOrdenador>192.168.16.47</IpOrdenador>
      </DatosGenerales>
    </DocumentElement>

    Con este siempre llega en null la entrada 

    "<?xml version="1.0" encoding="utf-16"?>
    <DocumentElement xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <DatosGenerales>
        <Estado>0</Estado>
        <ProcedenciaCodigo>412-14</ProcedenciaCodigo>
        <ProcedenciaNombre>procede</ProcedenciaNombre>
        <EntroUrgencia>1</EntroUrgencia>
        <AreaServicioCodigo>ABC123</AreaServicioCodigo>
        <AreaServicioNombre>OTHER</AreaServicioNombre>
        <IpOrdenador>192.168.16.47</IpOrdenador>
      </DatosGenerales>
    </DocumentElement>


    MODELO

    /// <remarks/>
        [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
        [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]    
        public partial class DocumentElement
        {
    
            private DocumentElementDatosGenerales datosGeneralesField;
            ///props ......
    
    
    }
    

    WebApi.config

     public static void Register(HttpConfiguration config)
            {          
                config.Formatters.Add(new XmlMediaTypeFormatter());
                Encoding utf16 = Encoding.GetEncoding("utf-16");
                config.Formatters.XmlFormatter.SupportedEncodings.Add(Encoding.Unicode);            
                config.Formatters.XmlFormatter.UseXmlSerializer = true;
    
                
                // Rutas de API web
                config.MapHttpAttributeRoutes();
                //config.Formatters.Remove(config.Formatters.XmlFormatter);
    
    
            }

    jueves, 27 de mayo de 2021 16:59