若存储内容中包含特殊字符,将内容存储至<![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