记:.net中xml各种实现

这是一个.NET类库,包含用于XML序列化和反序列化的静态方法。`StringWriterWithEncoding`类允许指定编码,`XmlHelper`类提供将对象序列化为XML文件或字符串的功能,并支持自定义命名空间。此外,还有从XML文件或字符串反序列化对象的方法。
摘要由CSDN通过智能技术生成

 public sealed class StringWriterWithEncoding : StringWriter
    {
        private readonly Encoding encoding;

        public StringWriterWithEncoding() : this(Encoding.UTF8) { }

        public StringWriterWithEncoding(Encoding encoding)
        {
            this.encoding = encoding;
        }

        public override Encoding Encoding
        {
            get { return encoding; }
        }
    }

    public static class XmlHelper
    {
        /// <summary>
        /// Serialize class instance to XML file
        /// </summary>
        /// <typeparam name="T">type</typeparam>
        /// <param name="XMLFileToCreate">XMLFileToCreate</param>
        /// <param name="instance">class instance</param>
        /// <param name="namespaces">class instance</param>
        public static void Serialize<T>(string XMLFileToCreate, T instance, XmlSerializerNamespaces namespaces)
        {
            if (instance == null) return;

            XmlSerializer xs = new XmlSerializer(typeof(T));
            using (StreamWriter sw = new StreamWriter(XMLFileToCreate))
            {
                xs.Serialize(sw, instance, namespaces);
            }
        }

        /// <summary>
        /// Serialize class instance to XML string
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="instance"></param>
        /// <param name="namespaces"></param>
        /// <returns></returns>
        public static string Serialize<T>(T instance, XmlSerializerNamespaces namespaces)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));

            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();

            using (StringWriter stringWriter = new StringWriter(stringBuilder))
            {
                xmlSerializer.Serialize(stringWriter, instance, namespaces);

                return stringWriter.ToString();
            }
        }

        /// <summary>
        /// Serialize class instance to XML string
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="instance"></param>
        /// <param name="namespaces"></param>
        /// <param name="encoding"></param>
        /// <returns></returns>
        public static string SerializeEncoding<T>(T instance, XmlSerializerNamespaces namespaces, Encoding encoding = null)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));

            if (encoding == null)
                encoding = Encoding.UTF8;

            using (StringWriterWithEncoding stringWriter = new StringWriterWithEncoding(encoding))
            {
                xmlSerializer.Serialize(stringWriter, instance, namespaces);

                return stringWriter.ToString();
            }
        }

        /// <summary>
        /// Serialize class instance to XML string
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="instance"></param>
        /// <returns></returns>
        public static string Serialize<T>(T instance)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));

            System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();

            using (StringWriter stringWriter = new StringWriter(stringBuilder))
            {
                xmlSerializer.Serialize(stringWriter, instance);

                return stringWriter.ToString();
            }
        }

        public static void Serialize<T>(string XMLFileToCreate, T instance)
        {
            if (instance == null) return;

            XmlSerializer xs = new XmlSerializer(typeof(T));

            using (StreamWriter sw = new StreamWriter(XMLFileToCreate))
            {
                xs.Serialize(sw, instance);
            }
        }

        public static void SerializeToGZip<T>(string zippath, string xmlname, T instance)
        {
            if (instance == null) return;

            XmlSerializer xs = new XmlSerializer(typeof(T));

            using (Stream sw = new MemoryStream())
            {
                xs.Serialize(sw, instance);

                GZipHelper.StreamToGZip(sw, zippath, xmlname);
            }
        }

        #region 自动读取XML数据到实体类

        /// <summary>
        /// 自动读取XML文件路径数据到实体类
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="XmlFilePath"></param>
        /// <returns></returns>
        public static T DeserializePath<T>(string XmlFilePath)
        {
            XmlSerializer xs = new XmlSerializer(typeof(T));
            using (FileStream fs = new FileStream(XmlFilePath, FileMode.Open))
            {
                var s = fs.Name;
                return (T)xs.Deserialize(fs);
            }
        }

        /// <summary>
        /// 自动读取XML字符数据到实体类
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="xmlText"></param>
        /// <returns></returns>
        public static T DeserializeXmlText<T>(string xmlText)
        {
            using (StringReader sr = new StringReader(xmlText))
            {
                XmlSerializer xmldes = new XmlSerializer(typeof(T));
                return (T)xmldes.Deserialize(sr);
            }
        }

        #endregion 自动读取XML数据到实体类
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值