Saltar al contenido

xmlNode a objetos

Te damos la bienvenida a nuestro sitio, en este lugar vas a encontrar la respuesta que buscas.

Solución:

Si tiene instalada la vista previa de WCF Rest Starter Kit, hay un buen truco:

  • abrir Visual Studio
  • seleccione el contenido de su nodo XML (el XML que forma uno de sus nodos) y cópielo en el portapapeles
  • desde su menú “Editar” en Visual Studio, elija “Pegar XML como tipos”

Esto pegará su XML que está en el portapapeles en su proyecto como una clase de C# que es capaz de deserializar ese XML exacto. ¡Bastante ingenioso!

Vea estas publicaciones de blog al respecto:

  • Aaron Skonnard: WCF REST Starter Kit: Pegar XML como tipos
  • “Pegar XML como tipos” en REST Starter Kit

¡Eso debería ahorrarle mucho escribir y hacer la vida mucho más fácil!

ACTUALIZAR:

Bien, ya tiene sus clases generadas a partir del XML que recibe. Ahora necesita convertir un XmlNode a tu clase

Tendrás que hacer algo como esto:

private static T ConvertNode(XmlNode node) where T: class

    MemoryStream stm = new MemoryStream();

    StreamWriter stw = new StreamWriter(stm);
    stw.Write(node.OuterXml);
    stw.Flush();

    stm.Position = 0;

    XmlSerializer ser = new XmlSerializer(typeof(T));
    T result = (ser.Deserialize(stm) as T);

    return result;

Debe escribir la representación XML (propiedad .OuterXml) de El XmlNode a un arroyo (aquí un MemoryStream) y luego use el XmlSerializer para volver a serializar el objeto de esa secuencia.

Puedes hacerlo con el método genérico y llamar

 Customer myCustomer = ConvertNode(xmlNode);

o incluso podría convertir ese código en un método de extensión en el XmlNode clase para que puedas escribir:

 Customer myCustomer = xmlNode.ConvertNode();

Bagazo

Tal vez sea demasiado tarde para responder aquí, pero ayudará a otros:

Aquí está la solución que podrá Deserialize del nodo XML.

 XmlDocument xmlDoc = new XmlDocument();
 xmlDoc.LoadXml(xml);

 XmlNode xmlNode = xmlDoc.SelectSingleNode("//SystemInfo");

 XmlSerializer serial = new XmlSerializer(typeof(SystemInfo));
 
 using(XmlNodeReader reader = new XmlNodeReader(xmlNode)) 
     SystemInfo syso =(SystemInfo)serial.Deserialize(reader);
 

El primero carga el XML a XmlDocument Object y luego encuentre el nodo principal que deseará deserializar como yo quiero Información del sistema nodo de objeto de todo el documento XML.

Una vez que encuentre eso, cree un XmlSerializer objeto con el tipo de clase específico que desee.

Ahora solo pasa el reader (creado con using) hacia deserializar método, obtendrá los objetos poblados en el objeto de clase tal como lo llené syso objeto con valores XML.

Codificación feliz 🙂

Puntuaciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *