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();
}
}
}
}
}