我需要使用自定义XmlElement覆盖哪种方法来按特定顺序格式化主体?</ p>
目前,当实例化类时,我让它从DefaultValueAttribute自动填充默认值,并通过构造函数创建初始子元素。
我想要做的是确保Elements子节点按特定顺序排列。这不是Web服务Xml转换,而是用户界面的简单文件输出。
我尝试重写InnerXml,但那是一个半身像。如果我不从构造函数创建初始子元素,那么它们永远不会出现。
<ElementType name="RGB">
<superType type="Class" />
<element name="Alpha" type="int">
<default>255</default>
</element>
<element name="R" type="int">
<default>0</default>
</element>
<element name="G" type="int">
<default>0</default>
</element>
<element name="B" type="int">
<default>0</default>
</element>
</ElementType>
<ElementType name="RGB">
<superType type="Class" />
<element name="R" type="int">
<default>0</default>
</element>
<element name="G" type="int">
<default>0</default>
</element>
<element name="B" type="int">
<default>0</default>
</element>
<element name="Alpha" type="int">
<default>255</default>
</element>
</ElementType>
实际输出不是XSLT格式,但这应该是我想要的格式。目前,最后编辑的是底部,我想让各种对象属性在父节点的ChildNodes中按特定顺序输出。我希望将迭代过载降至最低。我宁愿处理将类输出处理成XML格式的子节点创建。
答案 0 :(得分:0)
在查看我的编码错误后,发现我错误地覆盖了OuterXML属性。
这是另一个类的结果实现,但对我的问题是相同的答案。
public override string OuterXml {
get {
this.AppendChild( this.Location );
this.AppendChild( this.Size );
this.AppendChild( this.Hotspot );
foreach( RGB shad in this.Shading ) {
this.AppendChild( shad );
}
foreach( RGB spec in this.Specular ) {
this.AppendChild( spec );
}
return base.OuterXml;
}
对此解决方案的唯一警告是,即使我覆盖了第二级子元素中的OuterXml,也不会在OuterXml中表示第二级子元素。
我需要覆盖哪些方法,以便OuterXml捕获n层级的子元素/对象?