【问题标题】:serialize base class property in one derived class without serializing it in second serialize class在一个派生类中序列化基类属性,而不在第二个序列化类中序列化它
【发布时间】:2013-01-29 21:34:16
【问题描述】:

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

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

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

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.rDellRouter 类中并包含在CiscoRouter 序列化中?

【问题讨论】:

  • 为什么要在两个派生类中使用不同的序列化?在我看来,你破坏了 LSP。

标签: c# xml serialization base derived


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我相信您可以实现一个公共的 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; }
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 2014-12-13
      相关资源
      最近更新 更多