原文 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>

</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

.NET(C#):觉察XML反序列化中的未知节点的更多相关文章

  1. XML反序列化遇到数字型节点值为空导致反序列化异常

    实体类: [XmlRoot("stream")] public class _30320DuisiFukuanQueryResponseModel : ResponseModelB ...

  2. python中用ElementTree.iterparse()读取xml文件中的多层节点

    我在使用Python解析比较大型的xml文件时,为了提高效率,决定使用iterparse()方法,但是发现根据网上的例子:每次if event == 'end':之后elem.clear()或者是每次 ...

  3. 解析xml文件,遍历输出xml文件中的所有节点, 最终模仿实现struts2框架自动封装参数的功能

    程序结构:src文件夹下存放xml文件 该文件内容: <?xml version="1.0" encoding="UTF-8"?> <myst ...

  4. Maven 的 settings.xml 配置中的mirror节点

    maven2的setting.xml大家都知道,里面有个mirrors节点,用来配置镜像URL. mirrors可以配置多个mirror,每个mirror有id,name,url,mirrorOf属性 ...

  5. 读取xml文件中节点

    /// <summary> /// /// </summary> /// <param name="xmlpath">节点路径</para ...

  6. 让Visual Studio 2013为你自动生成XML反序列化的类

    Visual Sutdio 2013增加了许多新功能,其中很多都直接提高了对代码编辑的便利性.如: 1. 在代码编辑界面的右侧滚动条上显示不同颜色的标签,让开发人员可以对所编辑文档的修改.查找.定位情 ...

  7. 自动生成XML反序列化的类

    原文地址:http://www.cnblogs.com/jaxu/p/3632077.html   Visual Sutdio 2013增加了许多新功能,其中很多都直接提高了对代码编辑的便利性.如: ...

  8. Xml反序列化记录

    1.概述 公司项目遇到一个需要对接webservice的,webservice大部分用的都是xml来传输的,这里记录一下xml反序列化遇到的问题 2.xml工具类 xml序列化: public sta ...

  9. 关于Android中res目录strings.xml文件中的转义字符之笔录

    res目录strings.xml文件中的转义字符:         ------------------>     代表着一个汉字的位置:                        ---- ...

随机推荐

  1. Qt 控件

    一.布局管理器 QHBoxLayout 水平布局 QVBoxLayout 垂直布局 QGridLayout 格点布局 QFormLayout 关联布局 QSplitter 分裂器 Spacers 间隔 ...

  2. java web项目修改项目名称

    前几天在网上下了个项目,感觉名字长,所以想把项目改名字. 把项目导入到myeclipse中,将项目改名后, 还需要选中项目右键,properties ,修改项目的Context Root的名字.

  3. Java中的String,StringBuffer,StringBuilder详解与区别

    1.String Java中string类是不可变的,其中在声明的源代码中用的final,所以只能声明一次.所以每次在明面上的改变其实是重新生成一个String对象,指针指向新的String对象.同时 ...

  4. VueJS搭建简单后台管理系统框架(一)环境搭建

    做这份笔记的时候,Vue.js还是1.0,10月份Vue已经升级到2.0,这边也进行相应的更新,用Vue2.0进行一个简单的环境搭建 饿了么也刚好开源了其基于Vue.js的UI框架element-ui ...

  5. swift和objc之對比

    http://mobidev.biz/blog/swift_how_we_code_your_ios_apps_twice_faster

  6. java文本编辑器5

    package peng_jun; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.* ...

  7. SQL Server 判断数据库是否存在,表是否存在

    if DB_ID('testdb') is not null -- 如果这个数据库已经存在了 drop database testdb; create database testdb; if OBJE ...

  8. saiku中过滤窗口优化及隐藏异常报错

    问题一:当取消自动查询后,点击该维度应弹出过滤条件窗口,实际无反应,只有执行一次查询后再点击该维度,才能弹出过滤条件窗口 解决办法:打开WorkspaceDropZone.js文件,找到selecti ...

  9. JS isArray记录

    var isArray=Function.isArray||function(0){ return typeof o === "object" && Object. ...

  10. HDU 3037 Saving Beans(Lucas定理的直接应用)

    解题思路: 直接求C(n+m , m) % p , 由于n , m ,p都非常大,所以要用Lucas定理来解决大组合数取模的问题. #include <string.h> #include ...