如何将属性隐藏到XML序列化的基类中

时间:2014-04-24 08:43:05

标签: c# xml serialization subclass

让我成为基类

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>标记?

2 个答案:

答案 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");
}