C#的序列化一共有三种方案,二进制格式(使用BinaryFormatter序列化器)、SOAP格式(使用SoapFormatter序列化器)、XML格式(使用XmlSerializer序列化器)。这里只涉及XML序列化:
因为这里C#中的后台数据都来自于XML文件,因此需要对XML文件进行读写,写入XML文件需要提供需要序列化的参数和路径,而反序列化仅需要提供路径即可。这里注意序列化时不要出现循环引用的情况,不然会序列化失败。
头文件:using System.Xml.Serialization;
序列化代码:
public static void WriteExerciseToXml(AbstractExercise exercise, string fileName)
{
if (exercise == null
|| fileName == null)
{
throw new System.ArgumentNullException();
}
// open the XML file in FileStream
// overwrite the file if it exists, otherwise create a new one
FileStream xmlFile = new FileStream(fileName, FileMode.Create);
// create a text XML writer
// associated it with the opened XML file stream above
XmlDictionaryWriter xmlWriter = XmlDictionaryWriter.CreateTextWriter(xmlFile);
// create a serializer for the AbstractExercise type
DataContractSerializer serializer =
new DataContractSerializer(typeof(AbstractExercise));
// serialize the exercise object
serializer.WriteObject(xmlWriter, exercise);
// close streams
xmlWriter.Close();
xmlFile.Close();
}
反序列化代码:
// deserialize an object from the given XML file
public static AbstractExercise ReadExerciseFromXml(string fileName)
{
if (fileName == null)
{
throw new System.ArgumentNullException();
}
// open XML file in FileStream
FileStream xmlFile = new FileStream(fileName, FileMode.Open);
// crete a text XML reader
// associated it with the opened XML file above
XmlDictionaryReader reader =
XmlDictionaryReader.CreateTextReader(xmlFile, new XmlDictionaryReaderQuotas());
// create a serializer for the AbstratExercise type
DataContractSerializer serizalizer = new DataContractSerializer(typeof(AbstractExercise));
// Deserialize the object
AbstractExercise exercise = (AbstractExercise)serizalizer.ReadObject(reader, true);
// close streams
reader.Close();
xmlFile.Close();
return exercise;
}