为指定的XML文件生成类并反序列化

webservice的那种不说了,vs会自动生成客户端访问的类,

遇到这样一种情况:XML已知,要你处理

读取到DataSet里后发现不成,XML是多级的,根,子节点,子子节点,子子子节点,这样的树形数据DataSet处理不了,默认只取子节点,实际数据在子子节点或子子子节点

换思路吧,此路不通

使用程序解析,太Easy了,直接使用XPath语法取出Node集合即可,但除了此方法外是否还有其它方法呢?为了借助SqlBulkCopy的优势,

这种方法的好处显而易见,简单,不好的地方就是需要把Node数据导入到DataTable里,这里铁定有拆装箱的效率问题

想办法最高效得到DataRow[]或DataTable,最终找到另外一种办法解决!虽然效率同上述方法差不多,避免不了的拆装箱,好处是:多了一个选择,废话太多了,来看如何做到标题所述的办法

1,已知XML文件,格式如下

KornZhang
  26

2,根据此XML文件生成其架构(Schema)

打开VS命令行工具

假如我的文件位于D:\XMLFile1.xml

在命令行窗口里输入:XSD D:\XMLFile1.xml

我们的XML架构生成了,位于如图所示文件夹中(C:\Program Files\Microsoft Visual Studio 9.0\VC\xmlfile1.xsd)

将其Copy到D盘根目录下,输入命令:XSD D:\xmlfile1.xsd /c

该类生成了!位于如图所示位置(C:\Program Files\Microsoft Visual Studio 9.0\VC\xmlfile1.cs)

3,将此类添加至项目中

写反序列化函数

public Person DeSerialize( string file ) {
    Person Person;
    using( FileStream fs = new FileStream( file, FileMode.Open ) ) {
        XmlSerializer formatter = new XmlSerializer( typeof( Person ) );
        Person = (Person)formatter.Deserialize( fs );
    }
    return Person;
}

稍加修改,改为泛型类,代码如下(不是必须的):

public T DeSerialize( string file ) {
    T t;
    using( FileStream fs = new FileStream( file, FileMode.Open ) ) {
        XmlSerializer formatter = new XmlSerializer( typeof( T ) );
        t = (T)formatter.Deserialize( fs );
    }
    return t;
}

试下返回序列化功能!

总结下:
一开始我只知道有个XML文件,要在C#中处理,入库也好,绑定也好,总之这个文件需要处理才能使用,
处理方式有很多,解析XML是第一理想办法,但它解析出来的是一堆零星的局部变量;
最后我们借助工具实现该XML的实体类,并借助返序列化函数将其高效的解析到了内存中,往下的处理就入俗了,不再关心;

记录学习中的点点滴滴,记录这一路走来的风景
文章来自http://cnblogs.com/kkun,转载请注明出处

Original: https://www.cnblogs.com/ShaYeBlog/p/14119152.html
Author: 沙耶
Title: 为指定的XML文件生成类并反序列化

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/553487/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球