c# Serialization: 序列化内容至CData

来源:互联网 发布:mac翻墙回国软件 编辑:程序博客网 时间:2024/05/01 23:23
若存储内容中包含特殊字符,将内容存储至<![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 fdjsiaofjeiojtrioejwtgioreggjdsfl;agjf;aj            ";            string path = System.Environment.CurrentDirectory + @"\" + DateTime.Now.ToString("yyyyMMdd") + ".xml";            //序列化            SerializeToXML(qi, path);            //反序列化            QueryInfo qi2 = DeserializeFromXMLReturnQueryInfo(path);Reference:在XML中 特殊字符需要转义, 如:<<小于号>>大于号&&和''单引号""双引号




0 0