Tomas Beblar
Tomas Beblar

Reputation: 555

Deserialize XML. Catch errors?

I've have the following deserialization function (code snippet) to convert XML to Object. However, I need to catch errors and it seems to be failing silently. I'd like to know when there's a XML to object mismatch. It's not throwing any errors or exception, it's simply omitting the value. XmlDeserializationEvents e exists but is full of null values.

   string Str_Response = Utilities.PostToURL(URL, XML_Request);

   TextReader Txt_Reader = new StringReader(Str_Response);

   XmlReaderSettings XML_Settings = new XmlReaderSettings();

   XmlReader Xml_Reader = XmlReader.Create(Txt_Reader, XML_Settings, (string)null);

   var deserializer = new XmlSerializer(typeof(UPS.TrackResponse));

   XmlDeserializationEvents e = new XmlDeserializationEvents();

   UPS.TrackResponse Response = (UPS.TrackResponse)deserializer.Deserialize(Xml_Reader, e);

Upvotes: 3

Views: 2358

Answers (1)

Tomas Beblar
Tomas Beblar

Reputation: 555

Thanks to ryzngard who let me know that all I need to do is add event handlers to the XmlDeserializationEvents like so:

XmlDeserializationEvents e = new XmlDeserializationEvents();

   e.OnUnknownAttribute += On_UnknownAttribute;
   e.OnUnknownElement += On_UnknownElement;
   e.OnUnknownNode += On_UnknownNode;
   e.OnUnreferencedObject += On_UnreferencedObject;

And the relevant handlers stubs:

  public static void On_UnknownAttribute(object sender, XmlAttributeEventArgs e)
  {
  }

  public static void On_UnknownElement(object sender, XmlElementEventArgs e)
  {
  }

  public static void On_UnknownNode(object sender, XmlNodeEventArgs e)
  {
  }

  public static void On_UnreferencedObject(object sender, UnreferencedObjectEventArgs e)
  {
  }

The MSDN docs don't spell this out very well so I hope this helps someone in the future.

Upvotes: 6

Related Questions