C#读取XML文件,反序列化为指定对象

Xml序列化帮助类:

    public class XmlSerializeHelper
    {
        public static string Serialize(T obj)
        {
            return Serialize(obj, Encoding.UTF8);
        }

        /// 
        /// 实体对象序列化成xml字符串
        /// 
        /// 
        /// 
        /// 
        public static string Serialize(T obj, Encoding encoding)
        {
            try
            {

                if (obj == null)
                    throw new ArgumentNullException("obj");

                var ser = new XmlSerializer(obj.GetType());
                using (var ms = new MemoryStream())
                {
                    using (var writer = new XmlTextWriter(ms, encoding))
                    {
                        writer.Formatting = Formatting.Indented;
                        ser.Serialize(writer, obj);
                    }
                    var xml = encoding.GetString(ms.ToArray());
                    xml = xml.Replace("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"", "");
                    xml = xml.Replace("xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"", "");
                    return xml;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// 
        /// 反序列化xml字符为对象,默认为Utf-8编码
        /// 
        /// 
        /// 
        /// 
        public static T DeSerialize(string xml)
            where T : new()
        {
            return DeSerialize(xml, Encoding.UTF8);
        }

        /// 
        /// 反序列化xml字符为对象
        /// 
        /// 
        /// 
        /// 
        /// 
        public static T DeSerialize(string xml, Encoding encoding)
            where T : new()
        {
            try
            {
                var mySerializer = new XmlSerializer(typeof(T));
                using (var ms = new MemoryStream(encoding.GetBytes(xml)))
                {
                    using (var sr = new StreamReader(ms, encoding))
                    {
                        return (T)mySerializer.Deserialize(sr);
                    }
                }
            }
            catch (Exception e)
            {
                return default(T);
            }

        }
    }
xml文档内容:



  
  
  
  
对应实体类: 

using System.Xml.Serialization;

    [XmlRoot("SupplierList")]
    public class SupplierList
    {
        [XmlElement("Supplier")]
        public List DataSource { get; set; }
    }
    [XmlType("Supplier")]
    public class Supplier
    {
        [XmlAttribute("href")]
        public string Href { get; set; }

        [XmlAttribute("name")]
        public string Name { get; set; }
    }
读取Xml文件,反序列化为指定对象:

    FileStream fs = File.Open("Attach\\Supplier.xml", FileMode.Open, FileAccess.Read);
    StreamReader sr = new StreamReader(fs);
    string text = sr.ReadToEnd();
    var list = XmlSerializeHelper.DeSerialize(text);

如果要序列化指定的实体类,则需要在类上打[Serializable]标签.





你可能感兴趣的:(C#)