学习C# XmlSerializer 序列化反序列化XML
类、变量常用头:
[XmlRootAttribute]:对根节点的描述,在类声明中使用 如:下例的Html类
[XmlType]:对节点描述,在类声明中使用 如:下例的Head类
[XmlElement]:节点下内部节点描述,如果对数组标识,是对数组单元描述 如:下例的Html.body,Head.title,Head.metas和Head.scripts数组...
[XmlAttribute]:节点下内部属性描述 如:下例的Meat.httpequiv,Meat.content,Script.src,Script.type,...
[XmlArrayItem]:数组单元项描述 如:下例的Body.lis
[XmlArray]:数组描述 如:下例的Body.lis
[XmlIgnore]:使该项不序列化 如:下例的Meta.data
[XmlText]:做为节点的text文本输出 如:下例的Script.content,Li.Content...
例如:
类定义代码

1 using System;
2 using System.Xml.Serialization;
3
4 [XmlRootAttribute("html")]
5 public class Html
6 {
7 public Head head { get; set; }
8
9 [XmlElement("body")]
10 public Body body { get; set; }
11 }
12
13 [XmlType("head")]
14 public class Head
15 {
16 [XmlElement("title")]
17 public string titile;
18
19 [XmlElement("meta")]
20 public Meta[] metas;
21
22 [XmlElement("script")]
23 public Script[] scripts;
24 }
25
26 /// <summary>
27 /// http-equiv="Content-Type" content="text/html; charset=utf-8"
28 /// </summary>
29 public class Meta
30 {
31 [XmlAttribute("http-equiv")]
32 public string httpEquiv;
33
34 [XmlAttribute]
35 public string content;
36
37 [XmlIgnore]
38 public string data;
39 }
40
41 /// <summary>
42 /// script src="/script/common.js" type="text/javascript"
43 /// </summary>
44 public class Script
45 {
46 [XmlAttribute]
47 public string src;
48 [XmlAttribute]
49 public string type;
50
51 [XmlText]
52 public string content;
53 }
54
55 public class Body
56 {
57 [XmlElement("table")]
58 public List<Table> tables=new List<Table>();
59
60 [XmlArray("ui")]
61 [XmlArrayItem("li")]
62 public List<Li> Lis = new List<Li>();
63 }
64
65 public class Li
66 {
67 [XmlText]
68 public string content;
69 }
70
71 public class Table
72 {
73 [XmlAttribute]
74 public string height;
75 [XmlAttribute]
76 public string width;
77
78 [XmlText]
79 public string content;
80 }

序列化

1 System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Html));
2 Html html = new Html();
3 Head head = new Head();
4 head.title = "这是一个示例";
5 Meta[] metaArray = new Meta[1];
6 metaArray[0] = new Meta() { httpEquiv = "Content-Type", content = "text/html; charset=utf-8", data="该数据不被序列化" };
7 Script[] scriptArray = new Script[2];
8 scriptArray[0] = new Script() { type = "text/javascript", src = "/script/jquery.js" };
9 scriptArray[1] = new Script() { type = "text/javascript", content = "var number=6; alert('这是一个示例number='+number);" };
10 head.metas = metaArray;
11 head.scripts = scriptArray;
12 Body body = new Body();
13 body.tables.Add(new Table() { height = "5", width = "4", content = "这是table1" });
14 body.tables.Add(new Table() { content = "这是table2" });
15 body.Lis.Add(new Li() { content = "li1" });
16 body.Lis.Add(new Li() { content = "li2" });
17 html.head = head;
18 html.body = body;
19 string serializerString = "";
20 using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
21 {
22 System.IO.TextWriter writer = new System.IO.StreamWriter(stream, Encoding.UTF8);
23 System.Xml.Serialization.XmlSerializerNamespaces ns = new System.Xml.Serialization.XmlSerializerNamespaces();
24 ns.Add("", "");//不输出xmlns
25 serializer.Serialize(writer, html, ns);
26 stream.Position = 0;
27 byte[] buf = new byte[stream.Length];
28 stream.Read(buf, 0, buf.Length);
29 serializerString= System.Text.Encoding.UTF8.GetString(buf);
30 }

serializerString值为:

<?xml version="1.0" encoding="utf-8"?>
<html>
<head>
<title>这是一个示例</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="/script/jquery.js" type="text/javascript" />
<script type="text/javascript">var number=6; alert('这是一个示例number='+number);</script>
</head>
<body>
<table height="5" width="4">这是table1</table>
<table>这是table2</table>
<ui>
<li>li1</li>
<li>li2</li>
</ui>
</body>
</html>
学习C# XmlSerializer 序列化反序列化XML的更多相关文章
- C# 序列化反序列化XML的帮助类
以下是一个包装的用于序列化反序列化XML和C# 对象的类. public class XmlSerializeHelper<T> { #region Serial ...
- XmlSerializer 对象的Xml序列化和反序列化
http://www.cnblogs.com/yukaizhao/archive/2011/07/22/xml-serialization.html 这篇随笔对应的.Net命名空间是System.Xm ...
- XmlSerializer 对象的Xml序列化和反序列化,XMLROOT别名设置
这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中 ...
- C#操作Xml:XmlSerializer 对象的Xml序列化和反序列化
这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中的对 ...
- XML序列化反序列化—常用类
public class XMLSerializer { #region (public) xml序列化 /// <summary> /// ...
- C# XML序列化/反序列化参考
.NET提供了很不错的XML序列化/反序列化器,(它们所在的命名空间为System.Xml.Serialization)这是很方便的,下面对它的使用做一些总结,以供参考. 1,简单序列化 public ...
- 在.net中序列化读写xml方法的总结--转载过来学习学习
原文章地址:http://www.cnblogs.com/fish-li/archive/2013/05/05/3061816.html 首先做个大概的总结,XML包括的元素有XmlElement,X ...
- 对类参数的序列化和反序列化XML
/// <summary> /// Xml序列化与反序列化 /// </summary> public class XmlUtil { #region 反序列化 /// < ...
- XML序列化反序列化
using System; using System.Collections.Generic; using System.IO; using System.Xml.Serialization; nam ...
随机推荐
- springmvc 定时器
CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * ...
- google推出的SwipeRefreshLayout下拉刷新用法
使用如下: 1.先下载android-support-v4.jar最新版本,之前的版本是没有SwipeRefreshLayout下拉刷新控件的,如果已经更新,此步骤可省略. 2.在xml文件中引用an ...
- POJ 1456 Supermarket 区间问题并查集||贪心
F - Supermarket Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
- Kruskal vs Borůvka
做了个对比.Borůvka算法对于稠密图效果特别好.这两个都是求生成森林的算法.Prim+heap+tarjan过于难写不写了. V=200,E=1000 Kruskal method 4875048 ...
- What is the difference between provider network and self-service network in OpenStack?
"self-service networking" allows users to create their own virtual networks, subnets, rout ...
- thinkcentre m8380t黑屏 解决办法
问题: 开机后,显示器上显示“无信号输入”,一直黑屏,但是主机的风扇.硬盘声音都正常. 解决办法: 把vga线等加紧了一些,屏幕还是不亮,然后我关掉插排电源,给cmos放了电,再重启就可以了. 这时需 ...
- 【Python】Django Model 怎么使用 UUID 作为主键?
>>> import uuidprint uuid.uuid3(uuid.uuid1(), 'python.org') >>> # make a UUID base ...
- Repeated DNA Sequences
All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...
- Selenium测试Ajax程序(转)
上周末参加了Qclub的百度技术沙龙,听了百度的孙景卫讲了Web自动化测试,讲的非常好,然后在小组讨论时又有幸座在了一起.我们讨论的一个内容,就是Ajax应用程序比原来的非Ajax程序更不易测试,这里 ...
- ShareSDK集成微信、QQ、微博分享
1.前言 为什么要使用第三方的作为集成分享的工具呢?而不去用官方的呢?有什么区别么? 一个字"快",如果你使用官方的得一个个集成他们的SDK,相信这是一个痛苦的过程. 2.准备需要 ...