Jul 19

 把C#中的类用序列化保存/取出到XML文件,是很方便的事。

1. 要using命名空间:

C# Code Copy Code To Clipboard
  1. using System.Xml;  
  2. using System.Xml.Serialization;  
  3. using System.Runtime.Serialization;  

2. 要在类前加序列化标记,包括每个被成员类,都要加上:

C# Code Copy Code To Clipboard
  1. [Serializable]  
  2. [XmlRoot("UnitSystem")]  
  3. public class UnitSystem   
  4. {  
  5.     。。。。  
  6. }  

3. 需要保存的类的变量,包括子类中的变量,前面加上标记:

C# Code Copy Code To Clipboard
  1. 。。。  
  2. public class TUnitItem  
  3. {  
  4.     [XmlAttribute(AttributeName = "ParaA")]  
  5.     public double A;  
  6.     [XmlAttribute(AttributeName = "ParaB")]  
  7.     public double B;  
  8.     。。。  
  9. }  

4. 如果要保存的变量,是数组形式,加上如下标记:

C# Code Copy Code To Clipboard
  1. [XmlArray("Units")]  
  2. [XmlArrayItem("Unit")]  
  3. public List<TUnitItem> Units;  

5. 确保每个类,都有一个不带参数的构造方法:

C# Code Copy Code To Clipboard
  1. //这个实际上没用,只是为了序列化而建  
  2. public TUnitItem()  
  3. {  
  4.     UnitStr = "";  
  5.     A = 1;  
  6.     B = 0;  
  7. }  
  8. //这个才是真正用来构造类的  
  9. public TUnitItem(string Unitstr, double a, double b = 0)  
  10. {  
  11.     UnitStr = Unitstr;  
  12.     A = a;  
  13.     B = b;  
  14. }  

6. 然后,在你的类里,添加下面的函数用来保存、读取吧,我这里的类名是UnitSystem,改成你自己的即可:

C# Code Copy Code To Clipboard
  1. public void Save(string filename)  
  2. {  
  3.     System.IO.StreamWriter writer = new System.IO.StreamWriter(filename, false, System.Text.Encoding.UTF8);  
  4.     XmlSerializer ser = new XmlSerializer(GetType());  
  5.     ser.Serialize(writer, this);  
  6.     writer.Close();  
  7. }  
  8.   
  9. public void Load(string filename)  
  10. {  
  11.     System.IO.StreamReader reader = new System.IO.StreamReader(filename);  
  12.     XmlSerializer ser = new XmlSerializer(typeof(dbrcomponent));  
  13.     UnitSystem result = (UnitSystem)ser.Deserialize(reader);  
  14.     reader.Close();  
  15.     return result;  
  16. }  

 

 

Tags: , , ,
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]