XML序列化和反序列化(C#)
2013-12-05 18:41 taozsay 阅读(172) 评论(0) 收藏 举报XML序列化是把强类型的类转化为XML,用于存储和传输。 特征: 1)只会序列化public的属性和字段 2)不包含类型信息 3)构造函数不能有参数 4)ReadOnly的属性是不会被序列化的
1. 通用静态类 在这里我用了一个public的static方法来处理序列化和反序列化:
public static class ExtXMLSerialization { public static void SerializeToXml<T>(T obj, string fileName) { XmlSerializer ser = new XmlSerializer( typeof(T)); FileStream fileStream = new FileStream(fileName, FileMode.OpenOrCreate); ser.Serialize(fileStream, obj); fileStream.Close(); } public static T DeserializeFromXml<T>(string xml) { T result; XmlSerializer ser = new XmlSerializer( typeof(T)); using (TextReader tr = new StringReader(xml)) { result = (T)ser.Deserialize(tr); } return result; } }
之后的函数就调用这个方法来写范例代码了。 2. 基本方法 首先先要添加引用: using System.Xml.Serialization; using System.IO; 然后来看一个最简单的范例:
class Program { static void Main(string[] args) { Class1 a = new Class1(); a.Property1 = 1; a.Property2 = "aaa"; ExtXMLSerialization.SerializeToXml<Class1 >(a, "C:\\1.xml"); Console.Read(); } } public class Class1 { public int Property1{get;set;} public string Property2{get;set;} }
2. List 对于Generic的List,需要增加一个XmlElement 我们来增加一个类:
public class Class1List { [ XmlElement("Class1" )] public List <Class1> MyList { get; set; } public Class1List() { MyList = new List <Class1>(); } } 然后序列化这个类: static void Main(string[] args) { Class1 a = new Class1(); a.Property1 = 1; a.Property2 = "aaa"; Class1 b = new Class1(); b.Property1 = 2; b.Property2 = "bbb"; Class1List list = new Class1List(); list.MyList.Add(a); list.MyList.Add(b); ExtXMLSerialization.SerializeToXml<Class1List >(list, "C:\\1.xml"); Console.Read(); }
由于Class1List这个类通过Class1这个子类的tag来解析,需要我们用XmlElement关键字 来指引。
除了XmlElement之外,还有XmlAttribute(表示Attribute),XmlIgnore(表忽视),X mlRoot(表根节点)
作者:taoz
出处:www.cnblogs.com/bigbrid
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
本文如对您有帮助,还请多帮 【推荐】 下此文。
如果喜欢我的文章,请关注我的公众号
浙公网安备 33010602011771号