c# Serialization: 序列化內容至CData
阿新 • • 發佈:2019-01-29
若儲存內容中包含特殊字元,將內容儲存至<![CDATA[...]>中 可以避免使用轉義字元.
1.建立一個CData類(CData.cs)
2.使用CData //QueryInfo.cs{ private string m_Value; public CData() { } public CData(string p_Value) { m_Value = p_Value; } public string Value { get { return m_Value; } } public void ReadXml(XmlReader reader) { m_Value = reader.ReadElementContentAsString(); } public void WriteXml(XmlWriter writer) { writer.WriteCData(m_Value); } public XmlSchema GetSchema() { return (null); } public override string ToString() { return m_Value; } public static implicit operator string(CData element) { return (element == null) ? null : element.m_Value; } public static implicit operator CData(string text) { return new CData(text); } }
3. 準備序列化和反序列化兩個方法[Serializable] public class QueryInfo { [XmlElement] public string QueryName { get; set; } private CData queryContentSource; [XmlElement("QueryContentSource", typeof(CData))] public CData QueryContentSource { get { return queryContentSource; } set { queryContentSource = value; } } }
呼叫示例:public static void SerializeToXML(QueryInfo queryInfo, string saveTo) { XmlSerializer serializer = new XmlSerializer(typeof(QueryInfo)); using (TextWriter textWriter = new StreamWriter(saveTo)) { serializer.Serialize(textWriter, queryInfo); Process.Start(saveTo); } } public static QueryInfo DeserializeFromXMLReturnQueryInfo(string xmlPath) { XmlSerializer deserializer = new XmlSerializer(typeof(QueryInfo)); QueryInfo queryinfo = null; using (TextReader reader = new StreamReader(xmlPath)) { queryinfo = (QueryInfo)deserializer.Deserialize(reader); } return queryinfo; }
QueryInfo qi = new QueryInfo();
qi.QueryName = "Class1.dsadw";
qi.QueryContentSource = @"selefdsajio<>&gjr fdjsiaofjeio
jtrioejwtgioreg
gjdsfl;agjf;aj
";
string path = System.Environment.CurrentDirectory + @"\" + DateTime.Now.ToString("yyyyMMdd") + ".xml";
//序列化
SerializeToXML(qi, path);
//反序列化
QueryInfo qi2 = DeserializeFromXMLReturnQueryInfo(path);
Reference:
在XML中 特殊字元需要轉義, 如:
< < 小於號
> > 大於號
& & 和
' ' 單引號
" " 雙引號