微软XSD工具在根据XSD文件schema生成对应的C#载体类的时候,会发现有些时候,对于一些节点,不仅仅生成了对应的对象Property,还生成了一个相关的Specified.比如说,下边的schema.
在生成类中会有两个多余的属性,
public boolMinDuration_100msSpecified
public boolStageOnDemandSpecified
这两个属性有什么作用呢?这个bool的属性代表与其相关的属性是否应该被序列化。当我们从XML文件中的内容向C#中的类转换的时候,是用不到这些新增的字段的。但是当从C#对象向XML序列化的时候,就用到了。当MinDuration_100msSpecified设置为false的时候,相关的字段MinDuration_100ms是不会参与序列化的,也就是使用XmlSerializer工具的时候,生成的XML不含有MinDuration_100ms节点。
nullable为true并且minCoccurs为0的时候,如果没有specified字段,如果C#对象中MinDuration_100ms没有赋值,那么默认为0,在XML中生成<MinDuration_100ms>0</MinDuration_100ms>的节点,这个跟不生成这个节点所代表的意思是不一样的,一个是0值,另外一个是没有值。所以这里在序列化之前,我们需要手动设置一下sepecified字段,告诉XmlSerializer是否要序列化这个字段,从而保持生成的XML文件正确并且文件的大小不至于冗余。