function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
devfyadevfya 

How to deserialize XML to ApiFault instance?

Hi all!

 

I see this XML in SoapException.Detail:

 

<sf:LoginFault xsi:type="sf:LoginFault" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sf="urn:fault.enterprise.soap.sforce.com">
  <sf:exceptionCode>INVALID_LOGIN</sf:exceptionCode>
  <sf:exceptionMessage>Invalid username, password, security token; or user locked out.</sf:exceptionMessage>
</sf:LoginFault>

 

How do I deserialize XML to the correct ApiFault subclass? Does anybody do it?

I get "<LoginFault xmlns='urn:fault.enterprise.soap.sforce.com'> was not expected." when I try to do this:

 

using (var reader = new StringReader(input))
{
    fault = (ApiFault)new XmlSerializer(typeof(ApiFault)).Deserialize(reader);
}

Thanks!

Best Answer chosen by Admin (Salesforce Developers) 
devfyadevfya

When you want something done, do it yourself. :)

 

        private static ApiFault GetApiFault(SoapException soapException)
        {
            var apiFaultXml = soapException.Detail.FirstChild;
            var serializer = new XmlSerializer(
                typeof(ApiFault),
                new XmlRootAttribute
                {
                    ElementName = apiFaultXml.LocalName,
                    Namespace = apiFaultXml.NamespaceURI
                });
            using (var reader = new StringReader(apiFaultXml.OuterXml))
            {
                return (ApiFault)serializer.Deserialize(reader);
            }
        }