es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Deserializar el HttpResponseMessage de Soap:Envelope a un objeto C#

Estoy llamando al método Soap y recibiendo HttpResponseMessage de la siguiente manera:

HttpResponseMessage createResponse = await ExecuteMyEndPoint(endpoint, requestXMLstring, client);

Y leyendo eso como una respuesta de tipo String:

string responseMessage = await createResponse.Content.ReadAsStringAsync();

Esta es la muestra de respuesta:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns1:createWorkflowResponse xmlns:ns1="http://www.somedomain.com/xml/workflow">
         <WorkflowExternalReference xmlns:ns3="http://www.somedomain.com/xml/integration">123456789</WorkflowExternalReference>
      </ns1:createWorkflowResponse>
   </soap:Body>
</soap:Envelope>

¿Cómo puedo convertir esta respuesta en un objeto de C#?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para convertir la respuesta XML a un objeto C#, puedes usar una biblioteca como XmlSerializer o DataContractSerializer. Aquí tienes un ejemplo usando XmlSerializer:

    1. Crea clases C# que representen la estructura XML:
    [XmlRoot(ElementName = "createWorkflowResponse", Namespace = "http://www.somedomain.com/xml/workflow")]
    public class CreateWorkflowResponse
    {
        [XmlElement(ElementName = "WorkflowExternalReference", Namespace = "http://www.somedomain.com/xml/integration")]
        public string WorkflowExternalReference { get; set; }
    }
    
    [XmlRoot(ElementName = "Body", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
    public class Body
    {
        [XmlElement(ElementName = "createWorkflowResponse", Namespace = "http://www.somedomain.com/xml/workflow")]
        public CreateWorkflowResponse CreateWorkflowResponse { get; set; }
    }
    
    [XmlRoot(ElementName = "Envelope", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
    public class Envelope
    {
        [XmlElement(ElementName = "Body", Namespace = "http://schemas.xmlsoap.org/soap/envelope/")]
        public Body Body { get; set; }
    }
    
    1. Deserializa la respuesta XML al objeto C#:
    var serializer = new XmlSerializer(typeof(Envelope));
    using var reader = new StringReader(responseMessage);
    var envelope = (Envelope)serializer.Deserialize(reader);
    

    Ahora puedes acceder a las propiedades y valores del objeto deserializado. Por ejemplo, para obtener el valor de WorkflowExternalReference:

    var workflowExternalReference = envelope.Body.CreateWorkflowResponse.WorkflowExternalReference;
    

Comments are closed.