using System; using System.Text; using System.IO; using System.Xml; using System.Xml.Serialization; namespace PTMedicalInsurance { //class XmlHelper //{ //} /// /// XML工具类 /// public static class XmlHelper { /// /// 将一个对象序列化为XML字符串。这个方法将不生成XML文档声明头。 /// /// 要序列化的对象 /// 序列化产生的XML字符串 public static string XmlSerializerObject(object o) { Encoding encoding = Encoding.UTF8; XmlSerializer serializer = new XmlSerializer(o.GetType()); using (MemoryStream stream = new MemoryStream()) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.NewLineChars = "\r\n"; settings.Encoding = encoding; settings.OmitXmlDeclaration = true; settings.IndentChars = " "; XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); using (XmlWriter writer = XmlWriter.Create(stream, settings)) { serializer.Serialize(writer, o, ns); writer.Close(); } //return Encoding.UTF8.GetString(stream.ToArray()); stream.Position = 0; using (StreamReader reader = new StreamReader(stream, encoding)) { return reader.ReadToEnd(); } } } private static void XmlSerializeInternal(Stream stream, object o, Encoding encoding) { XmlSerializer serializer = new XmlSerializer(o.GetType()); XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.NewLineChars = "\r\n"; settings.Encoding = encoding; settings.IndentChars = " "; using (XmlWriter writer = XmlWriter.Create(stream, settings)) { serializer.Serialize(writer, o); } } /// /// 将一个对象序列化为XML字符串 /// /// 要序列化的对象 /// 编码方式 /// 序列化产生的XML字符串 public static string XmlSerialize(object o, Encoding encoding) { using (MemoryStream stream = new MemoryStream()) { XmlSerializeInternal(stream, o, encoding); stream.Position = 0; using (StreamReader reader = new StreamReader(stream, encoding)) { return reader.ReadToEnd(); } } } /// /// 将一个对象按XML序列化的方式写入到一个文件(采用UTF8编码) /// /// 要序列化的对象 /// 保存文件路径 public static void XmlSerializeToFile(object o, string path) { XmlSerializeToFile(o, path, Encoding.UTF8); } /// /// 将一个对象按XML序列化的方式写入到一个文件 /// /// 要序列化的对象 /// 保存文件路径 /// 编码方式 public static void XmlSerializeToFile(object o, string path, Encoding encoding) { using (FileStream file = new FileStream(path, FileMode.Create, FileAccess.Write)) { XmlSerializeInternal(file, o, encoding); } } /// /// 从XML字符串流中反序列化对象 /// /// 包含对象的XML字符串流 /// 要序列化的目标类型 /// 反序列化得到的对象 public static object XmlDeserialize(Stream stream, Type destType) { XmlSerializer mySerializer = new XmlSerializer(destType); using (StreamReader sr = new StreamReader(stream)) { return mySerializer.Deserialize(sr); } } /// /// 从XML字符串中反序列化对象 /// /// 包含对象的XML字符串 /// 要序列化的目标类型 /// 编码方式 /// 反序列化得到的对象 public static object XmlDeserialize(string s, Type destType, Encoding encoding) { using (MemoryStream ms = new MemoryStream(encoding.GetBytes(s))) { return XmlDeserialize(ms, destType); } } /// /// 从XML字符串中反序列化对象 /// /// 结果对象类型 /// 包含对象的XML字符串 /// 反序列化得到的对象 public static T XmlDeserialize(string s) { return (T)XmlDeserialize(s, typeof(T), Encoding.UTF8); } /// /// 读入一个文件,并按XML的方式反序列化对象。 /// /// 结果对象类型 /// 文件路径 /// 反序列化得到的对象 public static T XmlDeserializeFromFile(string path) { using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)) { return (T)XmlDeserialize(fs, typeof(T)); } } public static T XmlDeserializeFromString(string Str) { byte[] bytes = Encoding.UTF8.GetBytes(Str); MemoryStream stream = new MemoryStream(bytes); //StreamReader reader = new StreamReader(stream); //string text = reader.ReadToEnd(); return (T)XmlDeserialize(stream, typeof(T)); } /// /// 获取XML跟节点的值 /// /// 文件路径 /// public static string XmlGetElementName(string path) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(path); return xmlDoc.DocumentElement.Name; } /// /// XML格式化 /// /// /// public static string FormatXml(string xml) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml); using (StringWriter stringWriter = new StringWriter()) { using (XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter)) { xmlTextWriter.Formatting = Formatting.Indented; xmlDoc.WriteContentTo(xmlTextWriter); xmlTextWriter.Flush(); return stringWriter.ToString(); } } } } }