如何在C#中反序列化XML时忽略类中未定义的成员?
解决XML反序列化时忽略未定义元素的问题
你可以通过两种方式实现忽略XML中未在C#类里定义的内容:
方法一:订阅序列化器的未知元素事件
创建XmlSerializer实例后,订阅它的UnknownElement、UnknownAttribute和UnknownNode事件,事件处理逻辑留空即可让序列化器自动忽略这些未知内容。修改后的代码如下:
XmlSerializer serializer = new XmlSerializer(typeof(quotes.DOCUMENTS)); // 订阅事件,忽略未知元素、属性和节点 serializer.UnknownElement += (sender, e) => { }; serializer.UnknownAttribute += (sender, e) => { }; serializer.UnknownNode += (sender, e) => { }; using (Stream reader = new FileStream(quoteFile, FileMode.Open)) { var i = (DOCUMENTS)serializer.Deserialize(reader); }
方法二:通过XmlAttributeOverrides配置序列化器
如果想在类层面统一配置忽略规则,可以使用XmlAttributeOverrides创建自定义序列化器,明确指定忽略未知元素:
XmlAttributeOverrides overrides = new XmlAttributeOverrides(); XmlAttributes attributes = new XmlAttributes(); // 开启忽略未知元素的配置 attributes.XmlIgnoreUnknownElements = true; overrides.Add(typeof(quotes.DOCUMENTS), attributes); XmlSerializer serializer = new XmlSerializer(typeof(quotes.DOCUMENTS), overrides); using (Stream reader = new FileStream(quoteFile, FileMode.Open)) { var i = (DOCUMENTS)serializer.Deserialize(reader); }
内容的提问来源于stack exchange,提问作者Haho76
相关产品推荐
相关产品推荐

