csharp 从XML反序列化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp 从XML反序列化相关的知识,希望对你有一定的参考价值。

private static void DeserializeFromXML(string soapResult)
{
  //XDocument xDoc = XDocument.Parse(soapResult);
  XDocument xDoc = XDocument.Parse(@"<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"">
             <soapenv:Body>
                <RespuestaAtex xmlns=""http://webservices.atex.consulta.vehiculos.servicios.trafico.es"" >
                   <idUsuario>11110101C</idUsuario>
                   <idOrganismoResponsable>11110101C</idOrganismoResponsable>
                   <idResponsable>11110101C</idResponsable>
                   <version>4</version>
                   <CriteriosConsultaVehiculo >
                      <matricula>0149HWC</matricula>
                   </CriteriosConsultaVehiculo>
                   <resultado>OK</resultado>
                   <respuesta><![CDATA[<?xml version=""1.0"" encoding=""ISO-8859-1""?><vehiculo><datosGenerales><descripcionVehiculo><bastidor>WAUZZZ4F49N056245</bastidor><marca><codigo>00143</codigo><descripcion>AUDI</descripcion></marca><modelo>A6</modelo><nive/><paisProcedencia/><servicio><codigo>B00</codigo><descripcion>PART - SIN ESPECIFICAR</descripcion></servicio><servicioComplementario/><tipoIndustria><codigo/><descripcion>NO DISPONIBLE</descripcion></tipoIndustria><tipoVehiculo><codigo>40</codigo><descripcion>TURISMO</descripcion></tipoVehiculo></descripcionVehiculo><domicilioVehiculo><calle>CLL CONRADO DEL CAMPO 101</calle><codPostal>03204</codPostal><municipio>ELCHE</municipio><provincia><codigo>A</codigo><descripcion>ALICANTE</descripcion></provincia><pueblo/></domicilioVehiculo><domicilioVehiculoIne><provincia/></domicilioVehiculoIne><fechasControl><fechaItv>2016 - 03 - 05T00: 00:00 + 01:00</fechaItv><fechaMatriculacion>2014 - 03 - 07T00: 00:00 + 01:00</fechaMatriculacion><fechaPrimeraMatriculacion>2009 - 04 - 28T00: 00:00 + 02:00</fechaPrimeraMatriculacion></fechasControl><indicadores><bajaDefinitiva/><bajaTemporal/><cargaEEFF/><embargo/><excesoPesoDimension/><importacion/><incidencias>S</incidencias><limitacionDisposicion/><posesion/><precinto/><puertoFranco/><reformas>N</reformas><renting>N</renting><subasta>N</subasta><sustraccion/><tutela/></indicadores><matriculacion><fechaMatriculacion>2014 - 03 - 07T00: 00:00 + 01:00</fechaMatriculacion><jefatura><codigo>A</codigo><descripcion>ALICANTE</descripcion></jefatura><matricula>0149HWC</matricula><sucursal><codigo>0</codigo><descripcion/></sucursal></matriculacion><servicioAutonomo/><titular><datosPersona><identificacionPFisica><indicadorDevPF>false</indicadorDevPF></identificacionPFisica><identificacionPJuridica><cif>B54083142</cif><indicadorDevPJ>false</indicadorDevPJ><razonSocial>PROYECTO FUTURO TRESCIENTOS SL</razonSocial></identificacionPJuridica><personaFisica><indicadorDevPF>false</indicadorDevPF></personaFisica><personaJuridica><cif>B54083142</cif><indicadorDevPJ>false</indicadorDevPJ><razonSocial>PROYECTO FUTURO TRESCIENTOS SL</razonSocial></personaJuridica></datosPersona><domicilio><calle>CL CONRADO DEL CAMPO 101</calle><codPostal>03204</codPostal><municipio>ELCHE</municipio><provincia><codigo>A</codigo><descripcion>ALICANTE</descripcion></provincia><pueblo/></domicilio><domicilioIne><provincia/></domicilioIne></titular><requisitoria/></datosGenerales><datosTecnicos><carroceria/><catHomologacion/><color><codigo/><descripcion>NO DISPONIBLE</descripcion></color><combustibleEmisiones><categoriaElectrica/><codigoEco/><codos>0.0</codos><ecoInnovacion/><nivelEmisiones/><propulsion><codigo>1</codigo><descripcion>DIESEL</descripcion></propulsion><reduccionEco/><tipoAlimentacion><codigo/><descripcion/></tipoAlimentacion></combustibleEmisiones><distancias/><documentos><periodoValidezTarjeta>0</periodoValidezTarjeta><periodoValidezTarjeta15>15</periodoValidezTarjeta15><periodoValidezTarjetaNoValida>2</periodoValidezTarjetaNoValida><periodoValidezTarjetaValida>1</periodoValidezTarjetaValida></documentos><fabricante/><masas><masaMaxTecnica>0</masaMaxTecnica><masaServicio>0</masaServicio><pesoMaximo>2365</pesoMaximo><tara>1735</tara></masas><numHomologacion/><plazas><mixtas>000</mixtas><normales>5</normales><numPlazasPie>0</numPlazasPie></plazas><potencias><cilindrada>2698.0</cilindrada><potenciaFiscal>18.74</potenciaFiscal><potenciaNetaMax>0.0</potenciaNetaMax><relPotenciaPeso>0.0</relPotenciaPeso></potencias><procedencia><codigo>3</codigo><descripcion>IMPORT.CEE</descripcion></procedencia><tipoItv/><variante/><version/><datosTarjetaItv/></datosTecnicos><datosResponsables/><datosTramites><listaRematriculaciones/><matriculacionTemporal><anotacion/><fecha> 2009 - 04 - 28T00: 00:00 + 02:00 </fecha><matriculaAnterior/></matriculacionTemporal></datosTramites><datosAdministrativos><listaAvisos/><listaDenegatorias/></datosAdministrativos><datosITVReformas><listaItvs><itv><anotacion>0</anotacion><cuentaHoras>0</cuentaHoras><estacion/><fechaCaducidad> 2016 - 03 - 05T00: 00:00 + 01:00</fechaCaducidad><kilometraje>0</kilometraje><motivoItv><codigo>M</codigo><descripcion>PREVIA MATRIC.</descripcion></motivoItv><provincia><codigo>A</codigo><descripcion>ALICANTE</descripcion></provincia><resultadoItv><codigo>F</codigo><descripcion>FAVORABLE</descripcion></resultadoItv></itv></listaItvs></datosITVReformas><datosSeguros><listaSeguros/></datosSeguros><listaVehiculos/><datosSeguridad><listaElementosSeguridad/><ncap><anioEnsayo>2004</anioEnsayo><adultos>5.0</adultos><menores>4.0</menores><peatones>1.0</peatones><seguridad>0.0</seguridad><global>0.0</global></ncap></datosSeguridad><datosLibroTaller><listaDetalleIncidencias/></datosLibroTaller></vehiculo>]]></respuesta>
                </RespuestaAtex>
             </soapenv:Body>
          </soapenv:Envelope>");
  var xcdata = xDoc.DescendantNodes().OfType<XCData>().FirstOrDefault();
  string xmlVeh = xcdata.ToString().Replace("<![CDATA[", "").Replace("]]>", "");

  Serializer ser = new Serializer();
  PolVehiculoATEX vehAtex = ser.Deserialize<PolVehiculoATEX>(xmlVeh);
}

public class Serializer
    {
        /// <summary>
        /// populate a class with xml data 
        /// </summary>
        /// <typeparam name="T">Object Type</typeparam>
        /// <param name="input">xml data</param>
        /// <returns>Object Type</returns>
        public T Deserialize<T>(string input) where T : class
        {
            System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(T));

            using (StringReader sr = new StringReader(input))
            {
                return (T)ser.Deserialize(sr);
            }
        }

        /// <summary>
        /// convert object to xml string
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="ObjectToSerialize"></param>
        /// <returns></returns>
        public string Serialize<T>(T ObjectToSerialize)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(ObjectToSerialize.GetType());

            using (StringWriter textWriter = new StringWriter())
            {
                xmlSerializer.Serialize(textWriter, ObjectToSerialize);
                return textWriter.ToString();
            }
        }
    }
        

以上是关于csharp 从XML反序列化的主要内容,如果未能解决你的问题,请参考以下文章

Xml 反序列化。是不是可以从 xml 保存字符串格式?

反序列化从 SQL 查询返回的 XML 对象?

C#从xml反序列化日期时间

通过 LINQ 从 XML 反序列化

使用 Jackson 从 XML 到 POJO 的反序列化问题:没有从字符串值反序列化的字符串参数构造函数/工厂方法

如何从 nusoap 服务返回的 XML 反序列化对象?