Xsd: Xml序列化、反序列化的利器
下面讲述根据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序列化、反序列化的利器的更多相关文章
- C# XML序列化/反序列化参考
.NET提供了很不错的XML序列化/反序列化器,(它们所在的命名空间为System.Xml.Serialization)这是很方便的,下面对它的使用做一些总结,以供参考. 1,简单序列化 public ...
- C# Json库 和 xml 序列化反序列化 存在的问题
json 正常情况下不会对私有成员进行序列化和反序列化, 因此在用json做深拷贝时, 就会丢失数据. 解决办法: 声明成公有成员. json在序列化和反序列化时, 如果类中有IComma ...
- php json与xml序列化/反序列化
在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记 简单数组js ...
- XML序列化反序列化—常用类
public class XMLSerializer { #region (public) xml序列化 /// <summary> /// ...
- C# 复杂格式多级深度XML序列化反序列化
default.xml 文件如下: <config><partnerships> <partnership name="Main_Listener" ...
- C# XML序列化/反序列化类XmlSerializer使用示例
using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; ...
- XML序列化反序列化
using System; using System.Collections.Generic; using System.IO; using System.Xml.Serialization; nam ...
- XML序列化/反序列化数据库形式保存和读取。
直接上码: 首先创建class1类 public class Class1 { public string name { get; set; } public int age { get; set; ...
- C# WPF xml序列化 反序列化
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
随机推荐
- hashCode与equals详解
在工作中写业务类通常都会重写hashCode与equals方法,而这两个方法的区别与用途也常常被问道.平时也只是大概知道这二者的用途,今天闲下来,查阅资料加上自己的理 解,总结记录下. hashCod ...
- Java NIO使用及原理分析(二)
在第一篇中,我们介绍了NIO中的两个核心对象:缓冲区和通道,在谈到缓冲区时,我们说缓冲区对象本质上是一个数组,但它其实是一个特殊的数组,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况,如 ...
- 遇到java.lang.OutOfMemoryError: Java heap space问题【持续跟踪中...】
昨天下午app服务端无缘无故又502错了,我打开tomcat 日志: INFO: org.tuckey.web.filters.urlrewrite.UrlRewriteFilter DEBUG: i ...
- HTML5 汽泡效果
又到了晚上了,精神只有在晚上的时候才能爆发,可能程序员的命吧.废话就不多说了,今天我为大家带来的是一个气泡的效果. 代码下载 下面请看效果图
- <input type="radio" >与<input type="checkbox">值得获取
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- eclipse package,source folder,folder区别及相互转换
今天遇到一个问题:在com.a.b.c这个包路径下建一个package,但是不知为什么就会自动编程folder,而且在这个“package”下的所有property文件读不到.所以看了一下文章:在ec ...
- 如何利用 _ViewStart.cshtml对页面添加代码?
_ViewStart.cshtml 添加的代码会出现在页面的最上面(<html> 之前) .这样就造成了我原先很多页面出现兼容性问题(经难是因为<html>之前出现了其它的代码 ...
- Python爬虫获取知乎图片
前段时间想抓点知乎问题中的图片,了解了下爬虫,发现还是Python的简单方便,于是做了点尝试. #coding=utf-8 import urllib import re def getHtml(ur ...
- Access restriction:The type JPEGCodec is not accessible due to restriction on required library C:\Program Files\Java\jre6\lib\rt.jar
解决方法: Project -> Properties -> libraries, 先remove掉JRE System Library,然后再Add Library重新加入. ===== ...
- 一个简单的web服务器例子
一个简单的web容器小例子,功能十分简单,只能访问静态资源,对于新手来说还是有一定的意义.主要分三个类 1.server类:主要功能开启socketServer,阻塞server,接收socket访问 ...