让我成为基类
public class MyClass
{
private bool _success;
public bool Success
{
get { return _success; }
set { _success = value; }
}
}
和派生类
public class MySubClass : MyClass
{
public string str { get; set; }
}
问题:如何将MySubClass
序列化为XML
,以便序列化结果中没有<Success>
标记?
答案 0 :(得分:6)
[XmlIgnore]
public bool Success
{
get { return _success; }
set { _success = value; }
}
[XmlIgnore]
属性告诉序列化过程忽略此属性。
它永远不会被序列化,因此序列化XML中不会有节点
http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmlignore.aspx
要仅忽略子类中的字段,可以从基类覆盖该属性。
在您的基类中(请注意virtual
关键字):
public virtual bool Success {get;set;}
在你的子类
中[XmlIgnore]
public override bool Success {get;set;}
答案 1 :(得分:2)
如果您无权访问基类,则可以向班级添加ShouldSerializePropertyName
方法。
public bool ShouldSerializeSuccess()
{
return false;
}
按照惯例,XmlSerializer将执行任何ShouldSerialize ...方法来确定属性是否应该被序列化。你甚至可以有条件地做一些事情:
// this will serialize sucess only if it is true.
public bool ShouldSerializeSuccess()
{
return Sucess;
}
public bool ShouldSerializeName()
{
return !String.IsNullOrWhiteSpace(Name) && !Name.Equals("Default");
}