原文 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. c++中类模版中的static数据成员的定义

    这个有点绕. 如下: template <typename T> class A{ ......... static std::allocate<T> alloc_; }; t ...

  2. 加密传输SSL协议1_OpenSSL的安装

    终于在自己不断的奋斗之后,来到科大的一波考试过去了,但是为了不使自己过于放松,回顾一下之前的东西,做一下笔记.所以新开一个专题笔记: Using Apache with SSL 引入:首先我们在平时的 ...

  3. leetcode implement strStr python

    #kmp class Solution(object): def strStr(self, haystack, needle): """ :type haystack: ...

  4. Java学习之Java中常用对象

    java的几种对象(PO,VO,DAO,BO,POJO)解释     一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中 ...

  5. JVM学习之JVM1.6 GC详解

    转自:http://www.cnblogs.com/ggjucheng/p/3977384.html,多谢分享 前言  JVM GC是JVM的内存回收算法,调整JVM GC(Garbage Colle ...

  6. 将控制台程序做成windows服务

    一:添加windows服务 二:修改XXXInstaller1的StartType=Automatic,修改ProcessInstaller1的Account=LocalSystem 三:在progr ...

  7. Android Studio常用小技巧

    1. Debug 模式查看变量的值: To quickly evaluate the value of any expression while debugging the program, hold ...

  8. 非常值得学习的java 绘图板源代码

    package minidrawpad; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; impor ...

  9. 标准C编程-笔记全集

    C语言的基本概念 编写一个简单的C程序,后缀名保存为c(本次文件名为a.c) gcc:对c程序进行编译和连接:gcc a.c ./a.out:运行程序,输出程序的结果:其中a是c程序的文件名 说明:其 ...

  10. Oracle EBS-SQL (SYS-23):用户权限查询.sql

    select b.user_name, b.description, b.creation_date, d.responsibility_name   from fnd_user b, fnd_use ...