.NET(C#):觉察XML反序列化中的未知节点-阿里云开发者社区

开发者社区> 杰克.陈> 正文

.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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Elastic Engineering】Elasticsearch 简介
Elasticsearch 是一个非常强大的搜索引擎。
9 0
【Elastic Engineering】Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica
Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica
3 0
【Elastic Engineering】Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica
Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica
11 0
解决echarts地图geoJson报错问题(“echarts.min.js:45 Uncaught Error: Invalid geoJson format Cannot read prope”)
解决报错: 1.Invalid geoJson format Cannot read property ‘length’ of undefined 2 echarts.min.js:45 Uncaught Error: Invalid geoJson format Cannot read prope
5 0
Android WebSocket即时通信
  HTTP与WebSocket响应方式区别   WebSocket存在的理由   我们已经有了 HTTP 协议,为什么还需要另一个协议?因为只靠Http通信有一个缺陷:通信只能由客户端发起,HTTP 协议做不到服务器主动向客户端推送信息。这种单向请求的特点,注定了如果服务器有连续的状态变化,服务端想主动通知客户端,就难以实现。因此,工程师们一直在思考,有没有更好的方法,而 WebSocket 就是这样诞生的。
7 0
+关注
杰克.陈
一个安静的程序猿~
10427
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载