【问题标题】:Deserialize XML. Catch errors?反序列化 XML。捕捉错误?
【发布时间】:2018-08-30 22:34:08
【问题描述】:

我有以下反序列化函数(代码 sn-p)将 XML 转换为 Object。但是,我需要捕捉错误,它似乎默默地失败了。我想知道什么时候有 XML 到对象不匹配。它没有抛出任何错误或异常,它只是省略了值。 XmlDeserializationEvents e 存在但充满了空值。

   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);

【问题讨论】:

  • 只是阅读文档,我猜您需要将事件处理程序添加到 XmlDeserializationEvents docs.microsoft.com/en-us/dotnet/api/… 您也可以省略 events 参数并使用 InvalidOperationException 执行 try/catch 并查看它那样

标签: c# xml deserialization


【解决方案1】:

感谢 ryzngard,他让我知道我需要做的就是向 XmlDeserializationEvents 添加事件处理程序,如下所示:

XmlDeserializationEvents e = new XmlDeserializationEvents();

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

以及相关的处理程序存根:

  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)
  {
  }

MSDN 文档没有很好地说明这一点,所以我希望这对将来的某人有所帮助。

【讨论】:

    猜你喜欢
    • 2014-03-13
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 2018-06-04
    • 2011-08-09
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多