zoukankan      html  css  js  c++  java
  • xml反序列化时,如何生成与之对应的类文件

    一、序列化概念
    (微软定义)序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

    二、学习这方面的知识需要那些基础
    1,知道XML是什么,如何定义一个标准的XML文件
    2,知道XML架构(Schema)是什么,如何定义一个标准的XML架构文件
    3,知道XSD.exe的基本用法。
    如果你对XML或Schema有什么不清楚的地方,请到这里来学习 中国XML论坛

    三、案例学习
    假如我们这这样一个xml文件,我们需要将它反序列化为对象

    <?xml version="1.0" encoding="UTF-8"?>
    <!--示例 XML 文件由 XMLSpy v2006 U 创建 (http://www.altova.com)-->
    <Pages>
        
    <FirstPage Url="Text">
            
    <SecondPage Url="Text"/>
            
    <SecondPage Url="Text"/>
        
    </FirstPage>
        
    <FirstPage Url="Text">
            
    <SecondPage Url="Text"/>
            
    <SecondPage Url="Text"/>
        
    </FirstPage>
    </Pages>
    要将xml反序列化为对象,他们之间不能直接转换,需要一个中间人,就是Schema,Schema文件我们可以用工具生成,也可以自己手写,一般的做法就是先用工具生成,然后在其基础上修改,我这里用的生成工具是XMLSpy v2006,默认生成格式如下:
    Code
    其中的<xs:simpleType>节点我们不需要,修改成如下格式:
    Code
    用微软提供的工具xsd.exe也可以生成xml架构,网上有很多文章都做了介绍,这里就不列举了。
    有了Schema文件,我们就可以用xsd.exe工具来生成和xml文件对应的类文件了。生成方法如下:
    首先运行.NET FrameWork的SDK命令提示
    在其中键入:xsd /c /l:CS xsd文件路径 /o:文件输出路径
    切记"/o:文件输出路径"之间不要有空格
    其中红色标识部分分别为文件所在的物理路径,生成的类文件如下:
    Code
    正常情况下,我们需要对工具生成的类文件做一些修改,修改如下:
    Code
    这个类文件就是我们需要的东西了,这个类将集合用数组表示,我们不能使用foreach访问集合内的数据,如果我们想使用foreach该怎么办呢?我接着修改类结构
    数组的基类(Array)实现了IEnumerable接口,可以使用foreach访问集合内的数据,下边修改的类同样支持foreach,应该是类的另一种写法(我原来以为数组不支持foreach,真是太大意了,以后尽量少犯这么低级的错误。)
    修改后的类文件如下:
    Code
    仔细看过之后,不难发现,比上一个类多了两个集合类,FirstPageCollectionSecondPageCollection这两个类,我们就是用他们来取代数组,这连个类都继承至ArrayList,当然你也可以继承自别的类,例如CollectionBase,当然你也可以手写,需要实现如下接口IEnumerable。这是一个网友写的实现什么接口的类实例可以被foreach

    四、结束语
    xml反序列化其实并不复杂,只是我们平时用的少,多用两次就没有什么了。
    我们这里写了一个简单的demo,大家对比这看看会好理解一点,文件下载
  • 相关阅读:
    Java设计模式:单例模式
    Java设计模式:工厂方法模式
    Ubuntu16.04上搭建CDH5.14集群
    Spark 消息通信架构
    spark性能优化之shuffle优化
    spark的性能优化
    Hbase 的 Compaction
    Hbase要掌握的内容
    yarn的架构及原理
    MapReduce工作原理
  • 原文地址:https://www.cnblogs.com/fengfeng/p/1087077.html
Copyright © 2011-2022 走看看