Xsd: Xml序列化、反序列化的利器
2013-10-19 22:41
381 查看
下面讲述根据xml生成对应序列化反序列化类的过程,xml需要首先转化为xsd,然后再生成为实体类。其中,XSD是XML Schema Definition的缩写。
首先使用xsd命令生成xsd,格式是xsd + xml文件,默认就是会在当前目录下生成xsd文件(此次测试,执行命令后将会在D盘根目录下生成同名的xsd文件;
接着是生成实体类:命令格式是xsd + xsd文件,默认会在当前目录下生成.cs的类文件;
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
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
相关文章推荐
- c# xml序列化和反序列化
- JAXB主要用来实现对象和XML之间的序列化和反序列化
- C#序列化对象为XMl于反序列化
- Xml与对象之间的序列化、反序列化
- .NET对象的XML序列化和反序列化实例详解
- [ServiceStack.Text] .net序列化,反序列化组件(号称最快,支持 JSON,XML,JSV格式)
- Xml序列化和反序列化
- 一个经过改良的XMLHelper(包含了序列化,反序列化,创建xml文件,读取节点
- XML和实体类之间相互转换(序列化和反序列化)
- c# XML-Object对象 序列化-反序列化
- XML序列化和反序列化
- XML序列化和反序列化
- 序列化与反序列化 - BinaryFormatter二进制(.dat)、SoapFormatter(.soap)、XmlSerializer(.xml)
- XmlSerializer 对象的Xml序列化和反序列化
- XML序列化和反序列化
- 使用XML 序列化和反序列化类对象的方法
- xml序列化及反序列化.net对象
- XML序列化与反序列化 整理文档 - Kevin Cheng
- XML和实体序列化和反序列化
- 分享一个对象序列化为XML和反序列化的扩展方法