下面讲述根据xml生成对应序列化反序列化类的过程,xml需要首先转化为xsd,然后再生成为实体类。其中,XSD是XML Schema Definition的缩写。

1.制作xml文件:

 

<?xml version="1.0" encoding="utf-8" ?>
<root>
<function id="20e001" type="select" name="风速">
<operation name="开机">30e002</operation>
<operation name="关机">30e001</operation>
</function>
<function id="60e003" type="input"/>
<function id="20e004" type="select" name="风速">
<operation name="超高风">30e0W1</operation>
<operation name="高风">30e0W2</operation>
</function>
</root>

2.打开vs的command line:

CD到目标目录(此次测试目标目录是D盘);

首先使用xsd命令生成xsd,格式是xsd + xml文件,默认就是会在当前目录下生成xsd文件(此次测试,执行命令后将会在D盘根目录下生成同名的xsd文件;

接着是生成实体类:命令格式是xsd + xsd文件,默认会在当前目录下生成.cs的类文件;

3.程序实现反序列化以及序列化

private void AddNode()
{
try
{
XmlSerializer ser = new XmlSerializer(typeof(root)); FileStream fs = new FileStream(@"D:\XMLFile1.xml", FileMode.Open);
root root = ser.Deserialize(fs) as root;
//fs.Close(); rootFunctionOperation op = new rootFunctionOperation();
op.name = "20e005";
op.Value = "30e002"; rootFunction rf = new rootFunction();
rf.name = "上下扫风";
rf.operation.Add(op); root.Items.Add(rf); fs = new FileStream(@"D:\XMLFile1.xml", FileMode.Open, FileAccess.Write);
ser.Serialize(fs, root);
fs.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}

4.注意点

1.使用xsd生成的父节点的类型是数组类型,不方便增加子项,需要统一修改为List<T>,同时直接new成实例,这样操作方便;尝试ToList但是发现无法真正的的插入到元数组中,我理解ToList()方法其实是新建立了一个List对象,所有的操作针对新建的List,除非再次重新toArray();

2.序列化的FileStream无法和反序列化的FileStream共享,反序列化应用完成后,一定需要close,序列化的时候再new一个新的FileStream,然后调用Serialize方法,否则将会以apppend的方式,将root对象添加到xml文件的底部;

参考:

http://msdn.microsoft.com/zh-cn/library/x6c1kb0s

http://msdn.microsoft.com/zh-cn/library/system.xml.serialization.xmlserializer

Xsd: Xml序列化、反序列化的利器的更多相关文章

  1. C# XML序列化/反序列化参考

    .NET提供了很不错的XML序列化/反序列化器,(它们所在的命名空间为System.Xml.Serialization)这是很方便的,下面对它的使用做一些总结,以供参考. 1,简单序列化 public ...

  2. C# Json库 和 xml 序列化反序列化 存在的问题

    json 正常情况下不会对私有成员进行序列化和反序列化, 因此在用json做深拷贝时, 就会丢失数据. 解决办法:       声明成公有成员. json在序列化和反序列化时, 如果类中有IComma ...

  3. php json与xml序列化/反序列化

    在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记 简单数组js ...

  4. XML序列化反序列化—常用类

    public class XMLSerializer    {        #region (public) xml序列化        /// <summary>        /// ...

  5. C# 复杂格式多级深度XML序列化反序列化

     default.xml 文件如下: <config><partnerships>  <partnership name="Main_Listener" ...

  6. C# XML序列化/反序列化类XmlSerializer使用示例

    using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; ...

  7. XML序列化反序列化

    using System; using System.Collections.Generic; using System.IO; using System.Xml.Serialization; nam ...

  8. XML序列化/反序列化数据库形式保存和读取。

    直接上码: 首先创建class1类 public class Class1 { public string name { get; set; } public int age { get; set; ...

  9. C# WPF xml序列化 反序列化

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

随机推荐

  1. Hibernate学习之表一对多,多对一关系

    代码: person类: public class Person { private long id; private String name; private int age; private Da ...

  2. docker学习资料整理(持续更新中..)

    docker最近可以说火得一踏糊涂,跟 51大神在交流技术的时候这个东西会多次被提到,当我们还玩vm+linux/freebsd的时候,人家已经上升到更高层次了,这就是差距,感觉好高大上的样子,技术之 ...

  3. 01 Access数据库 测试连接

    附件:http://files.cnblogs.com/xe2011/AccesssConnectionState.rar using System.Data.OleDb; using System. ...

  4. Linux下jvm、tomcat、mysql、log4j优化配置笔记[转]

    小菜一直对操作系统心存畏惧,以前也很少接触,这次创业购买了Linux云主机,由于木有人帮忙,只能自己动手优化服务器了.... 小菜的云主机配置大致为:centeos6(32位),4核心cpu,4G内存 ...

  5. unix进程的环境--unix环境高级编程读书笔记

    http://blog.csdn.net/xiaocainiaoshangxiao/article/category/1800937

  6. cocos2dx_moveby_n_moveto

    对于参数(SEC, POINT)来说,CCMoveTo是移动到WND的绝对的POINT,CCMoveBy是相对当前位置移动一个相当于(0,0)到POINT的向量.

  7. HTML5本地化应用开发-HTML5 Web存储详解

    文章不是简单的的Ctrl C与V,而是一个字一个标点符号慢慢写出来的.我认为这才是是对读者的负责,本教程由技术爱好者成笑笑(博客:http://www.chengxiaoxiao.com/)写作完成. ...

  8. 使用Preference保存设置

    http://blog.csdn.net/barryhappy/article/details/7381544 Android中有四种持久化数据的方法:SQLite数据库.文件存储.Preferenc ...

  9. Activity是如何挂载Pargment的Day35

    Activity是如何挂载Pargment的Day35 mebile5.0 1.Fragment优化早上任务 思路 一个主Activity 短信群发器 中秋给朋友发短信,都能够加上他们的姓名,这样他们 ...

  10. jsp - forward指令

    forward指令 既可以指向静态的html页面,也可以转发到动态的jsp页面,并可以保留先前请求的参数. 例如,在web中新建一个Jsp_src.jsp的jsp页面: <%@ page lan ...