读写XML文件

1.将XML数据写入文件

         /// <summary>
         /// 写入xml
         /// </summary>
         /// <typeparam name="T">传入obj得类型</typeparam>
         /// <param name="fileName">保存得文件路径</param>
         /// <param name="obj">要保存得数据</param>
        public void WriteObjectToFile<T>(string fileName, T obj)
        {
            DataContractSerializer serializer = new DataContractSerializer(typeof(T));
            using (XmlWriter writer = new XmlTextWriter(fileName, Encoding.UTF8))
            {
                serializer.WriteObject(writer, obj);
            }
        }

2.从文件中读取XML数据,并序列化为对象

         /// <summary>
         /// 从文件中读取数据到xml文件
         /// </summary>
         /// <typeparam name="T">返回类型</typeparam>
         /// <param name="fileName">读取的文件路径</param>
        public T ReadObjectFromFile<T>(string fileName)
        {
            //会有多线程访问,文件被占用问题
            FileStream fs = new FileStream(fileName, FileMode.Open);
            /*FileAccess.Read读取和写入到文件的访问
            *ReadWrite 允许随后打开文件读取或写入。
            * 如果未指定此标志,则文件关闭前,任何打开该文件以进行读取或写入的请求(由此进程或另一进程发出)都将失败。
            *FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            */
            XmlDictionaryReader reader =
                XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
            DataContractSerializer ser = new DataContractSerializer(typeof(T));

            T obj = (T)ser.ReadObject(reader, true);
            reader.Close();
            fs.Close();
            return obj;

        }

3.将模型数据序列化为XML格式,并返回字符串

       /// <summary>
       /// 
       /// </summary>
       /// <typeparam name="T">类型</typeparam>
       /// <param name="obj">模型数据</param>
       /// <returns>返回xml字符串</returns>
        public string Serialize<T>(T obj)
        {
            DataContractSerializer ser = new DataContractSerializer(typeof(T));
            string xmlStr = String.Empty;
            using (MemoryStream stream = new MemoryStream())
            {
                try
                {
                    ser.WriteObject(stream, obj);
                    xmlStr = Encoding.Unicode.GetString(stream.ToArray());
                }
                catch
                {
                    throw;
                }
            }
            return xmlStr;
        }

4.将XML字符串转换成模型

        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="xmlStr">xml字符串</param>
        /// <returns>返回模型</returns>
        public T Deserialize<T>(string xmlStr)
        {
            T obj;
            try
            {
                DataContractSerializer dcs = new DataContractSerializer(typeof(T));
                using (TextReader reader = new StringReader(xmlStr))
                {
                    using (XmlReader xReader = XmlReader.Create(reader))
                    {
                        obj = (T)dcs.ReadObject(xReader);
                    }
                }
            }
            catch
            {
                throw;
            }
            return obj;

        }

后两个方法依赖的程序集

using System.Runtime.Serialization;

Model模型要加特性,这样才能序列化成功

    [Serializable, DataContract]
    public class NFSInfo
    {
        [DataMember]
        public string Name{ get; set; }
        [DataMember]
        public string Age { get; set; }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值