码迷,mamicode.com
首页 > 其他好文 > 详细

XML序列化和反序列注意点

时间:2014-11-20 18:19:59      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   os   sp   strong   文件   

         XML序列化和反序列注意点

  在开发过程中经常要用到xml序列化和反序列操作,在实际开发过程中有一些容易出现错误且不好解决的地方,下面就把我在工作中碰到的一些疑难点简单列出:

首先贴一段后面需要操作的代码

 

  [XmlRoot("User")]
    public class User
    {
        public string Name { get; set; }

        public int Age { get; set; }

        [XmlArray("Orders")]
        [XmlArrayItem("Order")]
        public List<Order> Orders { get; set; }
    }

    public class Order
    {
        public int ID { get; set; }

        public string Address { get; set; }

        public decimal TotalPrice { get; set; }
    }

 提点如下:

1)对于xml文件需要有一个根节点,如果你xml文件的根节点和实体类不同,则需要用XmlRoot标记,xml操作类里有很多这样的attribute,主要用到的有:

xmligrore:标记在序列化生成xml文件的时候不生成该属性

XmlElement:标记该属性的xml节点名称(后面会提到一个比较重要的用法)

XmlArray:标记该属性是数组集合

......

2)对于类中有数组的属性,需要用[XmlArray("Orders")],[XmlArrayItem("Order")]进行标记

3)在需要序列化的类上加上Serializable标记

4)对于如何在节点数据中生成CDData标记呢?下面的方法我觉得是最实用的,具体做法:

比如上面的User类,Name节点的值我要生成<Name><![CDATA[...]]></Name>这种格式的,我的处理方法如下:

1、对于上面的User类中Name属性用XmlIgore进行标记在序列化成xml文件的时候不进行序列化

2、增加一个部分类,同时上面的User类也增加partial,这样在编译后就会合并成一个类,序列化的时候就会用下面这个用xmlelement标记的Name节点进行序列化

    public partial class User
    {
        [XmlElement("Name")]
        public XmlNode NameCData
        {
            get
            {
                return new XmlDocument().CreateCDataSection(this.Name);
            }
            set
            {
                this.Name = value.Value;
            }
        }
    }

经过上面的处理,就能很好的生成节点值含有CDATA标记了。

 

  上面是我在一个功能点的时候遇到的一些问题及解决方法,如果您有更好的或者你遇到的一些难点在下面提出来;

 

XML序列化和反序列注意点

标签:style   blog   io   ar   color   os   sp   strong   文件   

原文地址:http://www.cnblogs.com/wolf_ben/p/4111069.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!