序列化一个派生类中的基类属性,而不在第二个序列化类中对其进行序列化

时间:2013-01-29 21:34:16

标签: c# xml serialization base derived

我正在寻找一个问题,但我仍然对如何解决这个问题感到困惑。 我有基类,有一些属性。 基类有两个派生类。

我想在一个派生类中序列化基类属性,但我不想在第二个序列化类中序列化相同的属性。

这不是仅用于示例目的的实际代码。

public class BaseRouter
{

    private Double r;  
    private Double bch;  

    [XmlElement("BaseRouter.r")]
    public double R { get { return r; } set { r = value; } }


    }

第一个派生类

      public class CiscoRouter : BaseRouter
{
    private String mRID; 

    [XmlAttribute("ID", Namespace = "rdf")]
    public String MRID { get { return this.mRID; } set { mRID = value; } }
    public Router()
    {

    }

第二个派生类

 public class DellRouter : BaseRouter
{
    private String mRID; 

    [XmlAttribute("ID", Namespace = "rdf")]
    public String MRID { get { return this.mRID; } set { mRID = value; } }
    public Router()
    {

    }

}

如何在BaseRouter.r课程中避免DellRouter并将其包括在CiscoRouter序列化中?

2 个答案:

答案 0 :(得分:0)

在基类中定义abstract方法,这将用于进行序列化/初始化。在您要序列化的类中BaseRouter.r在此方法实现中序列化它。在另一个类中,做任何合乎逻辑的替代。

答案 1 :(得分:0)

我相信您可以实现公共的ShouldSerializeR()函数并在DellRouter类中覆盖它以返回false。

class BaseRouter
{
    ...
    public double R { get { return r; } set { r = value; } }
    public virtual bool ShouldSerializeR() { return true; }
    ...
}

class DellRouter
{
    ...
    public override bool ShouldSerializeR() { return false; }
    ...
}