C# XML 反序列化解析
2024-08-25 12:53:36
自己用。记录一下!
用于配置文件的解析,可以用来设置配置。不用修改程序里参数。
用微软的XML 解析器来解析的。
1. Xml文件
文件名称:TestConfig.xml
<?xml version="1.0"?>
<Config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<PowerLine>
<Version>1.01</Version>
<FieldNum>10</FieldNum>
<Fields>
<Field name="STARTID">起始ID</Field>
<Field name="FNODE">起点</Field>
<Field name="TNODE">终点</Field>
<Field name="POWERID">线路ID</Field>
</Fields>
</PowerLine>
</Config>
2. 对类的结构定义
文件名称:ParaseConfig.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Xml;
using System.Xml.Serialization;
//
namespace PowerCongfig
{ // 名称和对应值
public class FieldNode
{
[XmlAttribute("name")]
public string name { get; set; }
[XmlText]
public string Value{ get; set; }
} // 名称和对应值
public class FieldsNode
{
[XmlElement("Field")]
public List<FieldNode> oFieldNode { get; set; }
} //
public class PowerLine
{
[XmlElement("Version")] // 版本
public double dVersion; [XmlElement("FieldNum")] // 属性字段个数
public int CountNode { get; set; } [XmlElement("Fields")]
public FieldsNode oFieldsNode { get; set; }
} [XmlRoot("Config")]
public class TestRoot
{
[XmlElement("PowerLine")]
public PowerLine oPowerLine { get; set; }
}
}
3. 反序列化解析Xml
文件名称:
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO; namespace PowerCongfig
{
class Program
{
static void Main(string[] args)
{
// BuildXMlCofig();
ParaseXMLConfig();
} // 用来生成Xml文件
private static void BuildXMlCofig()
{
TestRoot oTestRoot = new TestRoot();
oTestRoot.oPowerLine = new PowerLine();
oTestRoot.oPowerLine.dVersion = 1.01;
oTestRoot.oPowerLine.CountNode = 10; // FieldNode oFieldNode0 = new FieldNode();
oFieldNode0.name="STARTID";
oFieldNode0.Value="起始ID"; FieldNode oFieldNode1 = new FieldNode();
oFieldNode1.name="FNODE";
oFieldNode1.Value="起点";
FieldNode oFieldNode2 = new FieldNode();
oFieldNode2.name="TNODE";
oFieldNode2.Value="终点";
FieldNode oFieldNode3 = new FieldNode();
oFieldNode3.name="POWERID";
oFieldNode3.Value="线路ID";
//
oTestRoot.oPowerLine.oFieldsNode = new FieldsNode();
oTestRoot.oPowerLine.oFieldsNode.oFieldNode = new List<FieldNode>();
oTestRoot.oPowerLine.oFieldsNode.oFieldNode.Add(oFieldNode0);
oTestRoot.oPowerLine.oFieldsNode.oFieldNode.Add(oFieldNode1);
oTestRoot.oPowerLine.oFieldsNode.oFieldNode.Add(oFieldNode2);
oTestRoot.oPowerLine.oFieldsNode.oFieldNode.Add(oFieldNode3); // 序列化
// 保存文件名称
string oFileName = "C:\\my_Test.xml"; System.Xml.Serialization.XmlSerializer serializer = null;
System.IO.StreamWriter writer = null;
try
{
serializer = new System.Xml.Serialization.XmlSerializer(oTestRoot.GetType());
FileStream fs = new FileStream(oFileName, FileMode.Create);
serializer.Serialize(fs, oTestRoot);
}
catch (System.Exception ex)
{
string mes = ex.Message; }
finally
{
if (writer != null)
{
writer.Close();
}
}
} // 解析Xml到类对象中。
private static void ParaseXMLConfig()
{
TestRoot oTestRoot = new TestRoot();
oTestRoot.oPowerLine = new PowerLine();
oTestRoot.oPowerLine.oFieldsNode = new FieldsNode();
oTestRoot.oPowerLine.oFieldsNode.oFieldNode = new List<FieldNode>(); string oFileName = @"D:\zhangpengju\CodeTest\testcplus\TestConfig.xml";
System.Xml.Serialization.XmlSerializer serializer = null;
System.IO.StreamWriter writer = null;
try
{
serializer = new System.Xml.Serialization.XmlSerializer(oTestRoot.GetType());
FileStream fs = new FileStream(oFileName, FileMode.Open);
oTestRoot = (TestRoot)serializer.Deserialize(fs);
}
catch (System.Exception ex)
{
string mes = ex.Message; }
finally
{
if (writer != null)
{
writer.Close();
}
}
//
Console.WriteLine("Version is {0}",oTestRoot.oPowerLine.dVersion);
Console.ReadLine();
}
}
}
就这样。自己保存!
免分源码地址:http://download.csdn.net/detail/cartzhang/6270007
求进步!
最新文章
- Java基础之反射和动态代理
- TableView 隐藏多余的分割线
- HTML特殊转义字符列表
- [笔记] Duke - 统计预测
- git merge
- #define XXX do{...}while(0)
- oc-14-对象方法调用类方法
- Codeforces 390Div2-754D. Fedor and coupons(贪心+优先队列)
- POJ 2965 The Pilots Brothers&#39; refrigerator 位运算枚举
- 使用compass更高效的编辑css --- 图片精灵
- Linux C++程序进行性能分析工具gprof使用入门
- JavaScript中异步编程
- 关于Java中数组的常用操作方法
- 在Eclipse里面使用git上传项目到码云
- java程序调用xfire发布的webService服务(二)
- 阶段01Java基础day26反射
- 【转载】关于quartus ii软件中注释乱码问题的解决方法
- HDU 4745 Two Rabbits(最长回文子序列)
- 关系型数据库——主键&;外键的
- Qt获取控件位置,坐标总结
热门文章
- likely, unlikely的作用
- 教你高速高效接入SDK——Unity统一接入渠道SDK(Android篇)
- Aizu/Aoj 0121 Seven Puzzle
- Linux学习笔记——例说makefile 索引博文
- ArcGIS Python实现Modis NDVI批量化月最大合成
- 使用Lucene对预处理后的文档进行创建索引(可执行)
- [Linux]RedHat Linux 忘记rootpassword该怎样又一次设置password
- android app 架构设计01
- [POJ 1639] Picnic Planning
- 快速排序c++实现 快排C++代码实现