1. 程式人生 > >c# Serialization: 序列化內容至CData

c# Serialization: 序列化內容至CData

若儲存內容中包含特殊字元,將內容儲存至<![CDATA[...]>中 可以避免使用轉義字元.

1.建立一個CData類(CData.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);
        }

    }
2.使用CData //QueryInfo.cs
  [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;
        }
呼叫示例:
 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中 特殊字元需要轉義, 如:
<	<	小於號
>	>	大於號
&	&	和
'	'	單引號
"	"	雙引號