我可以使用[XmlIgnore]以便不写元素,但是如何根据变量的内容来控制它呢?
例如,当值为null时,我不想写XML元素。
[XmlRootAttribute("Component", IsNullable = true)]
public class Component {
[XmlArrayAttribute("worlds_wola", IsNullable = true)]
public List<Hello> worlds;
public int? a = null;
public int? b = null;
public Component()
{
worlds = new List<Hello>() {new Hello(), new Hello()};
}
}
但是,我得到了这个XML。
<worlds_wola>
...
</worlds_wola>
<a xsi:nil="true" />
<b xsi:nil="true" />
有没有办法不让一个没有任何价值的元素,比如“<a/>
”或“<b/>
”?
答案 0 :(得分:2)
如果aSpecified
不应该是生成的xml的一部分,请包含名称为bool
的属性并输入false
并返回a
:
public bool aSpecified
{
get { return this.a.HasValue; }
}
答案 1 :(得分:1)
显然XmlSerializer支持ShouldSerialize方法:
您还可以将自定义序列化代码与IXmlSerializable或ISerializable一起使用。
对于小班级来说,这很容易,但是对于较大的案例,它很快就会变得混乱和脆弱。
您也可以使用XmlSerializer构造函数来根据您的具体情况进行属性覆盖: