XML操作类

public static class XmlHelper
{/// 
    /// 将一个对象序列化为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序列化的方式写入到一个文件
    /// 
    /// 要序列化的对象
    /// 保存文件路径
    /// 编码方式
    public static void XmlSerializeToFile(object o, string path, Encoding encoding)
    {
        if( string.IsNullOrEmpty(path) )
            throw new ArgumentNullException("path");

        using( FileStream file = new FileStream(path, FileMode.Create, FileAccess.Write) ) {
            XmlSerializeInternal(file, o, encoding);
        }
    }

    /// 
    /// 从XML字符串中反序列化对象
    /// 
    /// 结果对象类型
    /// 包含对象的XML字符串
    /// 编码方式
    /// 反序列化得到的对象
    public static T XmlDeserialize(string s, Encoding encoding)
    {
        if( string.IsNullOrEmpty(s) )
            throw new ArgumentNullException("s");
        if( encoding == null )
            throw new ArgumentNullException("encoding");

        XmlSerializer mySerializer = new XmlSerializer(typeof(T));
        using( MemoryStream ms = new MemoryStream(encoding.GetBytes(s)) ) {
            using( StreamReader sr = new StreamReader(ms, encoding) ) {
                return (T)mySerializer.Deserialize(sr);
            }
        }
    }

    /// 
    /// 读入一个文件,并按XML的方式反序列化对象。
    /// 
    /// 结果对象类型
    /// 文件路径
    /// 编码方式
    /// 反序列化得到的对象
    public static T XmlDeserializeFromFile(string path, Encoding encoding)
    {
        if( string.IsNullOrEmpty(path) )
            throw new ArgumentNullException("path");
        if( encoding == null )
            throw new ArgumentNullException("encoding");

        string xml = File.ReadAllText(path, encoding);
        return XmlDeserialize(xml, encoding);
    }

//私有的
    private static void XmlSerializeInternal(Stream stream, object o, Encoding encoding)
    {
        if( o == null )
            throw new ArgumentNullException("o");
        if( encoding == null )
            throw new ArgumentNullException("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); writer.Close(); } }
}

 简洁版:

 #region  序列化

        /// 
        /// XML序列化
        /// 
        /// 序列对象
        /// XML文件路径
        /// 是否成功
        public static bool SerializeToXml(object obj, string filePath)
        {
            bool result = false;

            FileStream fs = null;
            try
            {
                fs = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
                XmlSerializer serializer = new XmlSerializer(obj.GetType());
                serializer.Serialize(fs, obj);
                result = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (fs != null)
                    fs.Close();
            }
            return result;

        }

        /// 
        /// XML反序列化
        /// 
        /// 目标类型(Type类型)
        /// XML文件路径
        /// 序列对象
        public static object DeserializeFromXML(Type type, string filePath)
        {
            FileStream fs = null;
            try
            {
                fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                XmlSerializer serializer = new XmlSerializer(type);
                return serializer.Deserialize(fs);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (fs != null)
                    fs.Close();
            }
        }

        #endregion

 http://www.cnblogs.com/fish-li/archive/2011/12/18/2292037.html

转载于:https://www.cnblogs.com/fuqiang88/p/6607855.html

你可能感兴趣的:(XML操作类)