using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Serialization; namespace BehaviorTreeSlayer { public class XmlUtils { public static T DeSerialize(string path, string name) { FileStream fileStream = File.Open(path + "/" + name, FileMode.Open); XmlSerializer xml = new XmlSerializer(typeof(T)); T list; try { list = (T)xml.Deserialize(fileStream); } catch (Exception e) { throw; } finally { fileStream.Close(); } return list; } public static T DeSerialize(string text) { using (StringReader sr = new StringReader(text)) { XmlSerializer xs = new XmlSerializer(typeof(T), Types); return (T)xs.Deserialize(sr); } } public static void XmlWriter(T obj, string path) { using (FileStream fs = new FileStream(path, FileMode.Create)) { XmlSerializer xml = new XmlSerializer(obj.GetType(), Types); xml.Serialize(fs, obj); } } static Type[] types; public static Type[] Types { get { if (types == null) { types = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(a => a.GetTypes().Where(t => t.IsSubclassOf(typeof(TreeNode)))) .ToArray(); } return types; } } public static string XmlSerialize(T obj) { string s; //派生类序列化 XmlSerializer xml = new XmlSerializer(obj.GetType(), Types); using (MemoryStream ms = new MemoryStream()) { xml.Serialize(ms, obj); s = Encoding.UTF8.GetString(ms.ToArray()); } return s; } } }