how to ignore soap stuff on deserializing xml to object?
c#, xml, xml-serialization
Solution
I don't have enough details to fill in the namespaces and element names for you, but using W3C's example SOAP response, the following code and classes deserialize the object:
var xdoc = XDocument.Load(@"C:\Desktop\CteWebservice.xml");
XNamespace soap = "http://www.w3.org/2001/12/soap-envelope";
XNamespace m = "http://www.example.org/stock";
var responseXml = xdoc.Element(soap + "Envelope").Element(soap + "Body")
.Element(m + "GetStockPriceResponse");
var serializer = new XmlSerializer(typeof(GetStockPriceResponse));
var responseObj =
(GetStockPriceResponse)serializer.Deserialize(responseXml.CreateReader());
[XmlRoot("GetStockPriceResponse", Namespace="http://www.example.org/stock")]
public class GetStockPriceResponse
{
public decimal Price { get; set; }
}
You could do the same with your `OCTE` class.
[XmlRoot("INCLUIRCONHECIMENTOFRETESAIDA",Namespace="http://192.168.1.180:8085/")]
public class OCTE
{
// with property mapping to CONHECIMENTOFRETE, etc.
}
Problem
When I get a xml, I need to deserialize it to a specific object and pass it via parameter in a web service method. Code: ``` var document = new XmlDocument(); document.Load(@"C:\Desktop\CteWebservice.xml"); var serializer = new XmlSerializer(typeof(OCTE)); var octe = (OCTE) serializer.Deserialize(new StringReader(document.OuterXml)); serviceClient.InsertOCTE(octe); ``` But when I try to deserialize I get a error saying ``` <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" > was not expected. ``` I need to ignore the envelope tag and other SOAP stuff. How can I do that? The xml file: ``` <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://192.168.1.180:8085/"> <soapenv:Header/> <soapenv:Body> <ns:INCLUIRCONHECIMENTOFRETESAIDA> <ns:CONHECIMENTOFRETE> <ns:CSTICMS></ns:CSTICMS> </ns:CONHECIMENTOFRETE> </ns:INCLUIRCONHECIMENTOFRETESAIDA> <soapenv:Body> ``` Test Code: ``` XNamespace soap = "http://schemas.xmlsoap.org/soap/envelope/"; XNamespace m = "http://192.168.1.180:8085/"; var soapBody = xdoc.Descendants(soap + "Body").First().FirstNode; var serializer = new XmlSerializer(typeof(OCTE)); var responseObj = (OCTE)serializer.Deserialize(soapBody.CreateReader()); ``` The soap `Body` gets the `<ns:INCLUIRCONHECIMENTOFRETESAIDA>` with all information that I need. But when I deserialize it to `responseObj` I get all values as null.