若存儲內容中包含特殊字符,將內容存儲至<![CDATA[...]>中 能夠避免使用轉義字符.
1.建立一個CData類(CData.cs)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.Schema;
namespace CodeGenerator
{
public class CData : IXmlSerializable
{
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);
}
}
}
2.使用CData //QueryInfo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace CodeGenerator
{
[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;
}
}
}
}
3. 準備序列化和反序列化兩個方法
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;
}
4.用
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中 特殊字符須要轉義, 如:
< < 小於號
> > 大於號
& & 和
' ' 單引號
" " 雙引號
還有不少特殊字符, 請參考:
http://xml.coverpages.org/CourtDocument11-2002-05s-DTD.txt