XML 序列化[XmlElement] [XmlAttribute]理解

http://blog2.impx.net/dragonimp/archive/2005/03/26/735.html

一般情况下,一个类只要加上Serializable 特性进行声明就可以作为这样的配置类了:

[Serializable ]

public class BlogConfigurationSettings



但仍然要注意几点:interface和abstract class不能作为配置类;类必须要有不带参数的公共构造函数;要作为配置参数的字段或者属性必须是public 的,而属性必须有set。



默认情况下,Xml序列化会把类中的字段或者属性序列化成xmlElement

note: from envykok

so :

public AAA BlogProviders
  {
   get {return this._blogProviders;}
   set {this._blogProviders = value;}
  }

is equal to

[XmlElement]

public AAA BlogProviders
  {
   get {return this._blogProviders;}
   set {this._blogProviders = value;}
  }

 

--aslo, xml note name will be type name =AAA


比如上面的BlogProviders ,但有些时候,可能要使用xml Attribute,比如:

<Tracking enableAggBugs = "true" …



这种情况,需要使用XmlAttributeAttribute 来声明:

[XmlAttribute("enableAggBugs")]

public bool EnableAggBugs


多数情况下,我们定义的配置类应该已经足够,但偶尔有些时候,我们需要在配置文件中增加配置元素或者配置属性,但又不能或者不想修改已有的配置类,为了避免反序列化的时候出错,也为了增强灵活性,应该给配置类增加这样两个属性:

[XmlAnyAttribute ]

public XmlAttribute[] XmlAttributes



[XmlAnyElement ]

public XmlElement[] XmlElements

 

note: from envykok


so, we can directly add any kind of xmlelement into this array,


for example : we can add "<a href='http://www.envykok.com'/>"  to class BlogConfigurationSettings

 

 

 

这是告诉XmlSerializer,如果有不可识别的元素或者属性,则将其放到这样两个数组 中,程序可以从数组中检索相应的设置。


<EntryHandlers>

<EntryHandler type="..." postType = "Comment" processAction ="Insert" processState="PreCommit" isAsync="false" />

...

</EntryHandlers>



[XmlArray ("EntryHandlers")]

public EntryHandler[] EntryHandlers



这样就可以定义数组参数。如果数组的元素不是同样的类型 ,但都继承自一个基类,那还可以这样定义:

<Validators>

<RegularExpressionValidator Name="Email" ...

<DateValidator Name="Date" ...

...

</Validators>



[XmlArray("Validators")]

[

XmlArrayItem ("Validator ", typeof(Nss.Data.Validators.Validator))

,

XmlArrayItem ("RegularExpressionValidator ", typeof(Nss.Data.Validators.RegularExpressionValidator))

]

public Nss.Data.Validators.Validator[] Validators;



XmlArray定义了数组,而XmlArrayItem定义了数组中可以使用的元素类型,使得系统的配置更加灵活,结构也更清晰。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值