using System; using System.IO; using System.Reflection; using System.Xml; using System.Xml.Serialization; namespace UtilLib { public static class XmlHelper { static readonly XmlSerializerNamespaces DEFAULT_NS = new XmlSerializerNamespaces(); static XmlHelper() { DEFAULT_NS.Add("", ""); } /// /// serialize object to xml file. /// /// the path to save the xml file /// the object you want to serialize public static void SerializeToXml(string path, object obj) { XmlSerializer serializer = new XmlSerializer(obj.GetType()); string content = string.Empty; //serialize using (StringWriter writer = new StringWriter()) { serializer.Serialize(writer, obj, DEFAULT_NS); content = writer.ToString(); } //save to file using (StreamWriter stream_writer = new StreamWriter(path)) { stream_writer.Write(content); } } /// /// xml 文件反序列化为对象 /// /// 序列化类型 /// the path of the xml file /// 对象 public static T DeserializeFromXml(string path) { XmlSerializer serializer = new XmlSerializer(typeof(T)); using (StreamReader reader = new StreamReader(path)) { return (T)serializer.Deserialize(reader); } } public static bool ReadFromXml(T obj, string path) { XmlDocument xd = new XmlDocument(); xd.Load(path); Type type = typeof(T); XmlNode root = xd.SelectSingleNode(type.Name); if (root == null) { return false; } //获取 RefHero 中所有的实例私有字段 FieldInfo[] fieldArray = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly); foreach (FieldInfo filed in fieldArray) { string fileName = filed.Name; XmlNode node = root.SelectSingleNode(fileName); if (node == null) { continue; } filed.SetValue(obj, node.InnerText); } return true; } public static T DeepClone(T data) { using (MemoryStream stream = new MemoryStream()) { XmlSerializer serializer = new XmlSerializer(typeof(T)); serializer.Serialize(stream, data); stream.Seek(0, SeekOrigin.Begin); return (T)serializer.Deserialize(stream); } } } }