.NET(C#):觉察XML反序列化中的未知节点

简介: 原文 www.cnblogs.com/mgen/archive/2011/12/12/2284554.html 众所周知XML是可以扩展的,XML的元素可以靠名称识别而不是只按照未知识别。在 XML反序列化的时候只要需要的信息存在就可以成功将XML数据转化成反序列化后的对象。

原文 www.cnblogs.com/mgen/archive/2011/12/12/2284554.html

众所周知XML是可以扩展的,XML的元素可以靠名称识别而不是只按照未知识别。在 XML反序列化的时候只要需要的信息存在就可以成功将XML数据转化成反序列化后的对象。但是这并不代表着用来反序列化的XML数据就一定是序列化的标准 结果。有些时候XML数据会有多余冗长信息,这个在反序列化的过程中默认是不会被觉察到的。

 

XmlSerializer类型有三个事件可以觉察到未知XML节点:UnknownNode,UnknownElement和UnknownAttribute。分别对应未知节点,未知元素和未知属性。注意XML元素和XML属性都属于XML节点。

比如这个类型:

publicclassWorker

{

    publicint Id;

    [XmlAttribute]

    publicbool Retired;

}

 

本只包括一个元素(Id)和属性(Retired),但XML数据中还有其他冗长信息:

<?xmlversion="1.0"encoding="utf-8" ?>

<Workerxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xmlns:xsd="http://www.w3.org/2001/XMLSchema"

        Retired="false"

        Department="sales">

    <Name>Mgen</Name>

    <Id>17</Id>

</Worker>

 

注册XmlSerializer的相应事件然后反序列化操作:

var xmlSerializer =newXmlSerializer(typeof(Worker));

xmlSerializer.UnknownNode += (sender, e) =>

{

    Console.WriteLine("未知节点:{0} 行{1} 列{2}", e.Name, e.LineNumber, e.LinePosition);

};

 

xmlSerializer.UnknownAttribute += (sender, e) =>

{

    Console.WriteLine("位置属性:{0} 行{1} 列{2}", e.Attr.Name, e.LineNumber, e.LinePosition);

};

xmlSerializer.UnknownElement += (sender, e) =>

{

    Console.WriteLine("位置元素:{0} 行{1} 列{2}", e.Element.Name, e.LineNumber, e.LinePosition);

};

 

//反序列化XML文件

var worker = (Worker)xmlSerializer.Deserialize(File.OpenRead("xmlfile.xml"));

 

输出:

未知节点:Department 行5 列21

位置属性:Department 行5 列21

未知节点:Name 行7 列6

位置元素:Name 行7 列6

目录
相关文章
|
4月前
|
XML JSON 数据处理
C# 中的 XML 与 JSON 数据处理
在现代软件开发中,数据交换和存储需求日益增长,XML 和 JSON 成为最常用的数据格式。本文从 C# 角度出发,详细介绍如何处理这两种格式,并提供示例代码。对于 XML,我们介绍了读取、创建和写入 XML 文件的方法;对于 JSON,则展示了如何使用 Newtonsoft.Json 库进行数据解析和序列化。此外,文章还总结了常见问题及其解决方案,帮助开发者更好地应对实际项目中的挑战。
201 61
C# 中的 XML 与 JSON 数据处理
|
3月前
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
124 0
|
3月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
646 0
|
5月前
|
存储 C# 数据库
解决C#对Firebase数据序列化失败的难题
在游戏开发中,Unity结合Firebase实时数据库为开发者提供强大支持,但在C#中进行数据序列化和反序列化时常遇难题。文章剖析了数据丢失或反序列化失败的原因,并给出解决方案,包括使用`JsonUtility`、确保字段标记为`[Serializable]`以及正确配置网络请求。示例代码演示了如何在Unity环境中实现Firebase数据的序列化和反序列化,并通过设置代理IP、Cookies和User-Agent来增强网络请求的安全性。这些技巧有助于确保数据完整传输,提升开发效率。
解决C#对Firebase数据序列化失败的难题
|
8月前
|
XML 存储 C#
C# xml文档反序列化记事
本文介绍了使用XmlSerializer进行XML序列化和反序列化的关键点。包括:1) 以独占方式读取XML文件以避免并发问题;2) 当元素名与类型名不一致时,可通过`[XmlArrayItem]`指定元素名,或创建继承自原始类型的子类;3) 处理DateTime反序列化错误,通过中间字符串属性转换;4) 提到了常用C#特性如`[XmlRoot]`, `[XmlElement]`, `[XmlAttribute]`, `[XmlIgnore]`和`[XmlArrayItem]`的作用。
|
8月前
|
XML 存储 JSON
c#XML、JSON的序列化和反序列化,看完你就懂了
c#XML、JSON的序列化和反序列化,看完你就懂了
172 0
|
3月前
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
84 1
|
5月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
2月前
|
XML Android开发 数据格式
Eclipse 创建 XML 文件
Eclipse 创建 XML 文件
30 2
|
2月前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
166 8