俗话说,一个好汉十个帮,众人拾柴火焰高等都说明一个道理,有更多的资源,更丰富的积累,都是助你走向成功,走向顶峰的推动力。
本篇的公用类库的介绍主题是程序开发中常用到的各种格式转换或者数据验证的辅助类,内容范围可能比较广泛,包括XML操作、序列化及反序列化操作、命令行解析,枚举对象操作,数据格式验证等等,不过都是不可多得、好用的辅助类。
本篇继续继续整理优化已有的共用类库,并继续发表随笔介绍公用类库的接口方法以及详细使用操作,力求给自己继续优化,积攒更丰富的公用类库资源,加深了解的同时,也给大家展现公用类库好的方面。
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(8)----非对称加密、BASE64加密、MD5等常用加密处理
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(7)-----声音播放、硬件信息、键盘模拟及钩子、鼠标模拟及钩子等设备相关
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(6)----全屏截图、图标获取、图片打印、页面预览截屏、图片复杂操作等
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(5)----热键、多线程、窗体动画冻结等窗体操作
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(4)----CSV、Excel、INI文件、独立存储等文件相关
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(3)----数据库相关操作
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(2)----常用操作
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(1)----开篇总结
1、序列化、反序列化、节点等操作类辅助类 XmlHelper。
实现效果
1)本辅助类主要是用来方便实现XML序列化、反序列化、节点等操作。
实现代码
1)辅助类提供的方法接口如下所示:
/// 构造函数
/// </summary>
/// <param name="XmlFile">XML文件路径</param>
public XmlHelper(string XmlFile)
#region 静态方法
/// <summary>
/// 二进制序列化
/// </summary>
/// <param name="path">文件路径</param>
/// <param name="obj">对象实例</param>
/// <returns></returns>
public static bool Serialize(string path, object obj)
/// <summary>
/// XML序列化
/// </summary>
/// <param name="path">文件路径</param>
/// <param name="obj">对象实例</param>
/// <returns></returns>
public static bool XmlSerialize(string path, object obj, Type type)
/// <summary>
/// 二进制反序列化
/// </summary>
/// <param name="path">文件路径</param>
/// <returns></returns>
public static object Deserialize(string path)
/// <summary>
/// XML反序列化
/// </summary>
/// <param name="path">文件路径</param>
/// <param name="type">对象类型</param>
/// <returns></returns>
public static object XmlDeserialize(string path, Type type)
#endregion
#region 公用方法
/// <summary>
/// 获取指定节点下面的XML子节点
/// </summary>
/// <param name="XmlPathNode">XML节点</param>
/// <returns></returns>
public XmlNodeList Read(string XmlPathNode)
/// <summary>
/// 读取节点属性内容
/// </summary>
/// <param name="XmlPathNode">XML节点</param>
/// <param name="Attrib">节点属性</param>
/// <returns></returns>
public string Read(string XmlPathNode, string Attrib)
/// <summary>
/// 获取元素节点对象
/// </summary>
/// <param name="XmlPathNode">XML节点</param>
/// <param name="elementName">元素节点名称</param>
/// <returns></returns>
public XmlElement GetElement(string XmlPathNode, string elementName)
/// <summary>
/// 获取元素节点的值
/// </summary>
/// <param name="XmlPathNode">XML节点</param>
/// <param name="elementName">元素节点名称</param>
/// <returns></returns>
public string GetElementData(string XmlPathNode, string elementName)
/// <summary>
/// 获取节点下的DataSet
/// </summary>
/// <param name="XmlPathNode">XML节点</param>
/// <returns></returns>
public DataSet GetData(string XmlPathNode)
/// <summary>
/// 替换某节点的内容
/// </summary>
/// <param name="XmlPathNode">XML节点</param>
/// <param name="Content">节点内容</param>
public void Replace(string XmlPathNode, string Content)
/// <summary>
/// 删除节点
/// </summary>
/// <param name="Node">节点</param>
public void Delete(string Node)
/// <summary>
/// 插入一节点和此节点的一子节点
/// </summary>
/// <param name="MainNode"></param>
/// <param name="ChildNode"></param>
/// <param name="Element"></param>
/// <param name="Content"></param>
public void InsertNode(string MainNode, string ChildNode, string Element, string Content)
/// <summary>
/// 插入一个节点带一个属性
/// </summary>
/// <param name="MainNode">指定的XML节点</param>
/// <param name="Element">元素名称</param>
/// <param name="Attrib">属性名称</param>
/// <param name="AttribContent">属性值</param>
/// <param name="Content">内容</param>
public void InsertElement(string MainNode, string Element, string Attrib, string AttribContent, string Content)
/// <summary>
/// 插入XML元素
/// </summary>
/// <param name="MainNode">指定的XML节点</param>
/// <param name="Element">元素名称</param>
/// <param name="Content">内容</param>
public void InsertElement(string MainNode, string Element, string Content)
/// <summary>
/// 保存XML文档
/// </summary>
public void Save()
2)辅助类XmlHelper的使用例子代码如下所示
SearchInfo searchInfo = new SearchInfo();
searchInfo.FieldValue = "TestValue";
string file = @"C:\searchInfo.xml";
XmlHelper.XmlSerialize(file, searchInfo, typeof(SearchInfo));
SearchInfo info2FromXml = XmlHelper.XmlDeserialize(file, typeof(SearchInfo)) as SearchInfo;
Console.WriteLine("{0} : {0}", info2FromXml.FieldName, info2FromXml.FieldValue);
XML序列化文件如下所示,并能通过该文件反序列化到对象实例中。
3)辅助类XmlHelper操作节点的例子代码如下所示。
/*
<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
<title>Oberon's Legacy</title>
<author>Corets, Eva</author>
<price>5.95</price>
</book>
</bookstore>
*/
file = @"c:\bookstore.xml";
XmlHelper helper = new XmlHelper(file);
string value = helper.Read("bookstore/book", "genre");
Console.WriteLine(value);//fantasy
value = helper.Read("bookstore/book", "ISBN");
Console.WriteLine(value);//2-3631-4
value = helper.GetElementData("bookstore/book", "title");
Console.WriteLine(value);//Oberon's Legacy
XmlElement element = helper.GetElement("bookstore/book", "title");
element.InnerText = "伍华聪";
DataSet ds = helper.GetData("bookstore/book");
ds.WriteXml(@"C:\ds.xml");
2、序列化和反序列化操作辅助类 Serializer。
实现效果
1)本辅助类主要是用来方便实现序列化合反序列化操作。
实现代码
1)辅助类提供的方法接口如下所示:
/// <summary>
/// 序列化对象到二进制字节数组
/// </summary>
/// <param name="obj">待序列化的对象</param>
/// <returns></returns>
public static byte[] SerializeToBinary(object obj)
/// <summary>
/// 序列化对象到指定的文件中
/// </summary>
/// <param name="obj">待序列化的对象</param>
/// <param name="path">文件路径</param>
/// <param name="mode">文件打开方式</param>
public static void SerializeToBinary(object obj, string path, FileMode mode)
/// <summary>
/// 序列号对象到文件中,创建一个新文件
/// </summary>
/// <param name="obj">待序列化的对象</param>
/// <param name="path">文件路径</param>
public static void SerializeToBinary(object obj, string path)
/// <summary>
/// 序列化对象到Soap字符串中
/// </summary>
/// <param name="obj">待序列化的对象</param>
/// <returns></returns>
public static string SerializeToSoap(object obj)
/// <summary>
/// 序列化对象到Soap字符串中,并保存到文件
/// </summary>
/// <param name="obj">待序列化的对象</param>
/// <param name="path">文件路径</param>
/// <param name="mode">文件打开方式</param>
public static void SerializeToSoap(object obj, string path, FileMode mode)
/// <summary>
/// 序列化对象到Soap字符串中,并保存到文件
/// </summary>
/// <param name="obj">待序列化的对象</param>
/// <param name="path">文件路径</param>
public static void SerializeToSoap(object obj, string path)
/// <summary>
/// 序列化对象到XML字符串中
/// </summary>
/// <param name="obj">待序列化的对象</param>
/// <returns></returns>
public static string SerializeToXml(object obj)
/// <summary>
/// 序列化对象到XML字符串,并保存到文件中
/// </summary>
/// <param name="obj">待序列化的对象</param>
/// <param name="path">文件路径</param>
/// <param name="mode">文件打开方式</param>
public static void SerializeToXmlFile(object obj, string path, FileMode mode)
/// <summary>
/// 序列化对象到XML字符串,并保存到文件中
/// </summary>
/// <param name="obj">待序列化的对象</param>
/// <param name="path">文件路径</param>
public static void SerializeToXmlFile(object obj, string path)
#endregion
/// <summary>
/// 从指定的文件中反序列化到具体的对象
/// </summary>
/// <param name="type">对象的类型</param>
/// <param name="path">文件路径</param>
/// <returns></returns>
public static object DeserializeFromXmlFile(Type type, string path)
/// <summary>
/// 从指定的XML字符串中反序列化到具体的对象
/// </summary>
/// <param name="type">对象的类型</param>
/// <param name="s">XML字符串</param>
/// <returns></returns>
public static object DeserializeFromXml(Type type, string s)
/// <summary>
/// 从指定的Soap协议字符串中反序列化到具体的对象
/// </summary>
/// <param name="type">对象的类型</param>
/// <param name="s">Soap协议字符串</param>
/// <returns></returns>
public static object DeserializeFromSoap(Type type, string s)
/// <summary>
/// 从指定的二进制字节数组中反序列化到具体的对象
/// </summary>
/// <param name="type">对象的类型</param>
/// <param name="bytes">二进制字节数组</param>
/// <returns></returns>
public static object DeserializeFromBinary(Type type, byte[] bytes)
/// <summary>
/// 从指定的文件总,以二进制字节数组中反序列化到具体的对象
/// </summary>
/// <param name="type">对象的类型</param>
/// <param name="bytes">二进制字节数组存储的文件</param>
/// <returns></returns>
public static object DeserializeFromBinary(Type type, string path)
/// <summary>
/// 获取对象的字节数组大小
/// </summary>
/// <param name="o">对象</param>
/// <returns></returns>
public static long GetByteSize(object o)
/// <summary>
/// 克隆一个对象
/// </summary>
/// <param name="o">对象</param>
/// <returns></returns>
public static object Clone(object o)
2)辅助类的使用例子代码如下所示
public class TestSerializeUtil
public static string Execute()
{
string result = string.Empty;
result += "使用SerializeUtil序列化及反序列化的辅助类:" + "\r\n";
Person person = new Person();
person.Name = "wuhuacong";
person.Age = 20;
byte[] bytes = SerializeUtil.SerializeToBinary(person);
Person person2 = SerializeUtil.DeserializeFromBinary(typeof (Person), bytes) as Person;
result += ReflectionUtil.GetProperties(person2) + "\r\n";
string xml = SerializeUtil.SerializeToXml(person);
Person person3 = SerializeUtil.DeserializeFromXml(typeof (Person), xml) as Person;
result += "person3:\r\n" + ReflectionUtil.GetProperties(person3) + "\r\n";
result += "SerializeUtil.GetByteSize(person3):" + SerializeUtil.GetByteSize(person3) + "\r\n";
Person person4 = SerializeUtil.Clone(person3) as Person;
result += "person4:\r\n" + ReflectionUtil.GetProperties(person4) + "\r\n";
result += "Util.AreObjectsEqual(person3, person4):" + Util.AreObjectsEqual(person3, person4)+ "\r\n";
SerializeUtil.SerializeToXmlFile(person3, Util.CurrentPath + "person3.xml", FileMode.Create);
Person person5 = SerializeUtil.DeserializeFromXmlFile(typeof (Person), Util.CurrentPath + "person3.xml") as Person;
result += "person5:\r\n" + ReflectionUtil.GetProperties(person5) + "\r\n\r\n";
result += SerializeUtil.ReadFile(Util.CurrentPath + "person3.xml") + "\r\n\r\n";
result += SerializeUtil.ReadFileFromEmbedded("TestUtilities.EmbedFile.xml") + "\r\n\r\n