Dec 14

C#中每个类都可以独立存为XML并从对应XML文件中读取. 具体操作如下:

1. 每个类的声明之前,要加XmlRoot()声明XML文件的根节点,比如:

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

2. 对于每一个类的公共成员,要加上如下声明:

C# Code Copy Code To Clipboard
  1. [XmlAttribute("Phaseid")]
  2. public int Phaseid
  3. {
  4. set { phaseid = value; }
  5. get { return phaseid; }
  6. }

3. 如果此公共成员是复杂类型,比如说是一个数组集合,则用XmlArray声明:

但是要注意的是多维数组无法序列化,在此情况下,只能先用个内部变量List<>来对[,]进行转化以便进行存取。

C# Code Copy Code To Clipboard
  1. [XmlArray("Fractions")]
  2. [XmlArrayItem("Fraction")]
  3. public List<double> Fraction
  4. {
  5. set { fraction = value; }
  6. get { return fraction; }
  7. }

4. 如果此公共成员是另一个类,则声明如下:

C# Code Copy Code To Clipboard
  1. [XmlElement(typeof(dbrcomponentlist))]
  2. public dbrcomponentlist Complist
  3. {
  4. set { complist = value; }
  5. get { return complist; }
  6. }

5. 如果此公共成员不需要保存到XML文件,则声明如下:

C# Code Copy Code To Clipboard
  1. [XmlIgnoreAttribute]
  2. public StreamType streamtype;

6. 保存操作:

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. }

7. 读取操作:

C# Code Copy Code To Clipboard
  1. public classDBRCalc Load(string filename)
  2. {
  3. System.IO.StreamReader reader = new System.IO.StreamReader(filename);
  4. XmlSerializer ser = new XmlSerializer(typeof(classDBRCalc));
  5. classDBRCalc result = (classDBRCalc)ser.Deserialize(reader);
  6. reader.Close();
  7. return result;
  8. }
  9. }

 

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