技术文章 > [原创]增强型XMLSERIALIZE序列化与反序列化代码

[原创]增强型XMLSERIALIZE序列化与反序列化代码

2018-10-21 13:34

文档管理软件,文档管理系统,知识管理系统,档案管理系统的技术资料:
本文原创提供一种简便的、可重用的XmlSerialize增强工具,可序列化List<T>的数据,并提供了序列化后保存到xml文件,和从xml文件读取并立即反序列化的实际源代码。
如果是单个类class的实例,而非List<T>,也可以使用。

using System;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;

public static class XmlUtility
{
/// <summary>
/// 对象序列化成 XML String
/// </summary>
public static string XmlSerialize<T>(T obj)
{
string xmlString = string.Empty;
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream())
{
xmlSerializer.Serialize(ms, obj);
xmlString = Encoding.UTF8.GetString(ms.ToArray());
}
return xmlString;
}

/// <summary>
/// XML String 反序列化成对象
/// </summary>
public static T XmlDeserialize<T>(string xmlString)
{
T t = default(T);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
using (Stream xmlStream = new MemoryStream(Encoding.UTF8.GetBytes(xmlString)))
{
using (XmlReader xmlReader = XmlReader.Create(xmlStream))
{
Object obj = xmlSerializer.Deserialize(xmlReader);
t = (T)obj;
}
}
return t;
}
}

使用方法:

private List<TaskInfo> Items = List<TaskInfo>new ();

public static void SaveToXml(string filename)
{
string xml = XmlUtility.XmlSerialize<List<TaskInfo>>(Items);
File.WriteAllText(filename, xml, Encoding.GetEncoding(“GB2312“));
}

/// <summary>
/// 从XML文件中读取配置与任务信息
/// </summary>
/// <param name=“filename“></param>
public static void LoadFromXml(string filename)
{
if (File.Exists(filename))
{
string xml = File.ReadAllText(filename, Encoding.GetEncoding(“GB2312“));
Items = XmlUtility.XmlDeserialize<List<TaskInfo>>(xml);
}
}

使用总结:

XmlSerializer提供了一种数据标准化存储的很好的手段。
但是,您要知道 XmlSerializer 是很占CPU与内存资源的。
建议在数据量不大(小于100条),字段不是很多的情况下使用比较好。
如果比较大的数量量,则建议使用其他存储方式,比如json;或者用数据库是最好的。

北京联高软件开发有限公司
Happy for coding!