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中 特殊字符需要转义, 如:
<	<	小于号
>	>	大于号
&	&	和
'	'	单引号
"	"	双引号




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值