Jul
19
把C#中的类用序列化保存/取出到XML文件,是很方便的事。
1. 要using命名空间:
C# Code Copy Code To Clipboard
- using System.Xml;
- using System.Xml.Serialization;
- using System.Runtime.Serialization;
2. 要在类前加序列化标记,包括每个被成员类,都要加上:
C# Code Copy Code To Clipboard
- [Serializable]
- [XmlRoot("UnitSystem")]
- public class UnitSystem
- {
- 。。。。
- }
3. 需要保存的类的变量,包括子类中的变量,前面加上标记:
C# Code Copy Code To Clipboard
- 。。。
- public class TUnitItem
- {
- [XmlAttribute(AttributeName = "ParaA")]
- public double A;
- [XmlAttribute(AttributeName = "ParaB")]
- public double B;
- 。。。
- }
4. 如果要保存的变量,是数组形式,加上如下标记:
C# Code Copy Code To Clipboard
- [XmlArray("Units")]
- [XmlArrayItem("Unit")]
- public List<TUnitItem> Units;
5. 确保每个类,都有一个不带参数的构造方法:
C# Code Copy Code To Clipboard
- //这个实际上没用,只是为了序列化而建
- public TUnitItem()
- {
- UnitStr = "";
- A = 1;
- B = 0;
- }
- //这个才是真正用来构造类的
- public TUnitItem(string Unitstr, double a, double b = 0)
- {
- UnitStr = Unitstr;
- A = a;
- B = b;
- }
6. 然后,在你的类里,添加下面的函数用来保存、读取吧,我这里的类名是UnitSystem,改成你自己的即可:
C# Code Copy Code To Clipboard
- public void Save(string filename)
- {
- System.IO.StreamWriter writer = new System.IO.StreamWriter(filename, false, System.Text.Encoding.UTF8);
- XmlSerializer ser = new XmlSerializer(GetType());
- ser.Serialize(writer, this);
- writer.Close();
- }
- public void Load(string filename)
- {
- System.IO.StreamReader reader = new System.IO.StreamReader(filename);
- XmlSerializer ser = new XmlSerializer(typeof(dbrcomponent));
- UnitSystem result = (UnitSystem)ser.Deserialize(reader);
- reader.Close();
- return result;
- }



