在开发的过程中有时需要用到序列化和反序列化,比如web service ,由于这个服务支持的返回类型有限 所以我们需要对现有的对象进行序列化,需要使用的时候再进行反序列化。
1.首先我们要对需要序列化的对象进行关键字标记 [Serializable] 比如:
[Serializable]
public class AnswersheetRoot
{
public AnswersheetRoot()
{
AnswersheetList = new List<Answersheet>();
}
private List<Answersheet> _answersheetList;
public List<Answersheet> AnswersheetList
{
get { return _answersheetList; }
set { _answersheetList = value; }
}
}
2.序列化
[WebMethod]
public string GetAnswerSheetList(int paperID)
{
List<Answersheet> sheetList = ExamCommunicationManager.GetsheetList(paperID);
AnswersheetRoot sheetRoot = new AnswersheetRoot();
foreach (Answersheet sheet in sheetList)
{
sheetRoot.AnswersheetList.Add(sheet);
}
XmlSerializer serilizer = new XmlSerializer(typeof(AnswersheetRoot));
StringBuilder sbXML = new StringBuilder();
StringWriter writer = new StringWriter(sbXML);
serilizer.Serialize(writer, sheetRoot);
writer.Close();
return sbXML.ToString();
}
3.使用时需要反序列化
string sheetXml = serverCon.GetAnswerSheetList(paperID);
StringReader reader = new StringReader(sheetXml.ToString());
XmlSerializer xs = new XmlSerializer(typeof(AnswersheetRoot));
AnswersheetRoot sheetRoot = (AnswersheetRoot)xs.Deserialize(reader);
reader.Close();
List<Answersheet> AnswersheetList = sheetRoot.AnswersheetList;