标签: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标记了。
上面是我在一个功能点的时候遇到的一些问题及解决方法,如果您有更好的或者你遇到的一些难点在下面提出来;
标签:style blog io ar color os sp strong 文件
原文地址:http://www.cnblogs.com/wolf_ben/p/4111069.html