Save a tree as XML using XmlSerializer
在我的一个项目中,需要保存一个这样的树结构:
恰好,这个项目的开发语言是C#,这时我就想到了XmlSerializer,从网上找了一些教程,
最后总算圆满完成任务:
1: [XmlRoot("HotLines")]
2: public class HotLines
3: {
4: #region Constructor...
5: public HotLines()
6: {
7: Lines = new List<HotLine>();
8: LineGroups = new List<HotLines>();
9: }
10: #endregion
11:
12: #region Properties...
13: [XmlAttribute("Name")]
14: public string Name
15: {
16: get;
17: set;
18: }
19:
20: [XmlArray("Lines")]
21: [XmlArrayItem("Line", typeof(HotLine))]
22: public List<HotLine> Lines
23: {
24: get;
25: set;
26: }
27:
28: [XmlArray("LineGroups")]
29: [XmlArrayItem("Lines", typeof(HotLines))]
30: public List<HotLines> LineGroups
31: {
32: get;
33: set;
34: }
35: #endregion
36:
37: #region Utilities...
38: static public void SerializeToXML(HotLines lines, string fileName)
39: {
40: XmlSerializer serializer = new XmlSerializer(typeof(KingTools.HotLines));
41: TextWriter textWriter = new StreamWriter(fileName);
42: serializer.Serialize(textWriter, lines);
43: textWriter.Close();
44: }
45:
46: static public HotLines DeserializeFromXML(string fileName)
47: {
48: XmlSerializer deserializer = new XmlSerializer(typeof(KingTools.HotLines), new Type[] { typeof(HotLine) });
49: TextReader textReader = new StreamReader(fileName);
50: var lines = (HotLines)deserializer.Deserialize(textReader);
51: textReader.Close();
52: return lines;
53: }
54: #endregion
55: }
56:
57: [XmlRoot("Line")]
58: public class HotLine
59: {
60: #region Properties...
61: [XmlElement("File")]
62: public string File
63: {
64: get;
65: set;
66: }
67:
68: [XmlElement("Column")]
69: public int Column
70: {
71: get;
72: set;
73: }
74:
75: [XmlElement("Comment")]
76: public string Comment
77: {
78: get;
79: set;
80: }
81: #endregion
82: }
看看最终的代码,不得不为C#开发效率的高效而折服。用C++保存这样的一份数据,想想都怕,不知道其中要出多少幺蛾子。
下面是一份测试代码:
1: HotLines root = new HotLines();
2: root.Name = "Root";
3:
4: HotLine aLine = new HotLine();
5: aLine.Column = 10;
6: aLine.File = "Test";
7:
8: root.Lines.Add(aLine);
9:
10: HotLines group = new HotLines();
11: group.Name = "group";
12:
13: root.LineGroups.Add(group);
14: group.Lines.Add(aLine);
15:
16: string fileName = @"c:\lines.xml";
17: HotLines.SerializeToXML(root, fileName);
18:
19: var newRoot = HotLines.DeserializeFromXML(fileName);
20:
21: Assert.AreEqual(newRoot.Name, root.Name);
22: Assert.AreEqual(newRoot.Lines.Count, root.Lines.Count);
23: Assert.AreEqual(newRoot.LineGroups.Count, root.LineGroups.Count);
测试代码生成的XML如下:
1: <?xml version="1.0" encoding="utf-8"?>
2: <HotLines xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="Root">
3: <Lines>
4: <Line>
5: <File>Test</File>
6: <Column>10</Column>
7: </Line>
8: </Lines>
9: <LineGroups>
10: <Lines Name="group">
11: <Lines>
12: <Line>
13: <File>Test</File>
14: <Column>10</Column>
15: </Line>
16: </Lines>
17: <LineGroups />
18: </Lines>
19: </LineGroups>
20: </HotLines>
代码说明一切,XmlSerializer 和 XML Attribute的便利不言自明。
转载于:https://www.cnblogs.com/jalenwang/archive/2011/07/28/save_tree_as_xml.html
Save a tree as XML using XmlSerializer相关推荐
- C# 派生类的XmlSerializer序列化XML
近段对XML 序列化进行处理,用XmlSerializer这个挺好用的. 但是对于派生类对象的XML的生成总会报错.因为同一个节点名称,不能反射为不同的对象.这个在网上找了好久,都说要利用反射来处理. ...
- C# XML反序列化与序列化举例:XmlSerializer(转)
1 using System; 2 using System.IO; 3 using System.Xml.Serialization; 4 5 namespace XStream 6 { 7 /// ...
- xml与java代码相互装换的工具类
2019独角兽企业重金招聘Python工程师标准>>> 这是一个java操作xml文件的工具类,最大的亮点在于能够通过工具类直接生成xml同样层次结构的java代码,也就是说,只要你 ...
- boost解析xml文件
前面我们介绍了xml文件,今天我们试着用boost库来解析xml文件.我们将举两个例子来说明怎么使用. 来自boost官方的例子 先看xml文件的内容: <debug><filena ...
- 都 2021 年了,竟然有人搞大数据时忽略 JSON 而去研究用 C# 把 XML 转换为 XML 的技术...
在大数据项目开发过程中,ETL(Extract-Transform-Load)是必不可少.即便目前 JSON 非常流行,开发人员也有必定会有对远古系统的挑战,而 XML 格式的数据源作为经典存在浑身上 ...
- C#实现TreeView向XML的绝对转换类
从第一次接触XML开始就想写一个能实现tree和XML灵活转换的类了. 写这个类大概用去了将近半天的时间,花的时间有些长了.呵呵..好在收获颇多,熟练了XML的读写类,对C#中的foreach循环也有 ...
- python处理xml设置节点值_python:通过增加数字更改xml节点值
使用lxml库非常容易实现 from lxml import objectify class Parser(object): def __init__(self, tree, counter_star ...
- C# XML序列化和反序列化
原文:http://www.cnblogs.com/nhxy/archive/2010/11/16/1878409.html 本文描述如何使用CLR中的StringWriter,XmlSerializ ...
- [C#基础]c#中的XmlSerializer类
原文链接:http://www.cnblogs.com/nhxy/archive/2010/11/16/1878409.html 何为序列化?何为反序列化?引用msdn上的一句话就是--XML 序列化 ...
最新文章
- 关于android工程添加support-v7包的问题
- 学习selenium所须要具备的技术
- DreamWeaver做ASP 第5页
- oracle怎么设置出蓝色边,Oracle 数据库入门之———————-,多行函数-蓝色留心...
- 17.立体匹配——介绍,匹配,寻找最佳匹配 Matlab实战_1
- 搜狗开源最新NLP研究成果,打造业内最全机器阅读理解工具包SMRC
- RHCS Oracle HA for OEL5.8 KVM实践配置
- java实现文件上传下载功能_java文件上传下载功能实现代码
- php读取mpp,php解析mpp文件中的前置任务
- 【Python入门练手小项目】画一个蓝胖子❤️
- 关于笔记本突然鼠标无法连接,电脑蓝牙消失的问题
- IObit Uninstaller Pro v10.6.0.4 Cracked 安装监视器无法开启或无效的解决方案
- 企业网站建设改版的未来方向
- 招银面经总结;面经转载,答案自写。
- 武汉新时标文化传媒有限公司新型网红经济爆发式增长
- icp算法原理与实现
- 合肥市第 34 届青少年信息学(计算机)奥林匹克竞赛小学组试题
- 局域网文件服务器的搭建
- 使用threejs实现地球辉光和大气层效果
- 小马哥---高仿苹果6 主板型号z13刷机拆机主板图 6572芯片nand字库
热门文章
- 如何使用VMware Converter进行P2V热迁移
- 新时代网管的十二大主要职责(一)
- linux将b1内容重定向到b3,linux
- hardmard积 用什么符号表示_简明算术教程——第四章 线性代数——第1节 矩阵环(二)...
- 微信攻城三国怎么找服务器,攻城三国怎么玩 新手FAQ常见问题答案汇总[图]
- linux nfs acl 特定ip,技术|RHCSA 系列(七): 使用 ACL(访问控制列表) 和挂载 Samba/NFS 共享...
- python删除过期文件_Python删除指定目录下的过期文件的代码
- Linux下rgmii接口,zynq7010 petalinux 2019.2 RGMII via EMIO 连接问题
- 白名单模板_亚马逊品牌备案常见问题—— 白名单、IP加速器及品牌备案后无法使用A+...
- 以太坊区块链_以太坊区块链搭建与使用(一)-私有链