【问题标题】:Can data contract classes inherit from one another?数据契约类可以相互继承吗?
【发布时间】:2011-04-26 22:25:50
【问题描述】:

我想使用数据契约类作为其他一些类的基类。 我知道如果我想在两个类之间定义继承,我需要使用“KnownType”属性。

但如果我想在两个以上的类之间进行继承.. 假设我还有从 A 类继承的 C 类 - 我该怎么做?

我尝试将“[KnownType(typeof(C))]”添加到 A 类定义中 - 但它不起作用。

[DataContract]
[KnownType(typeof(B))]
public class A
{
   [DataMember]
   public string Value { get; set; }
}

[DataContract]
public class B : A
{
   [DataMember]
   public string OtherValue { get; set; }
}

[DataContract]
public class C : A
{
   [DataMember]
   public string OtherValue { get; set; }
}

【问题讨论】:

    标签: wcf


    【解决方案1】:
    [DataContract]
    [KnownType(typeof(B))]
    [KnownType(typeof(C))]
    public class A
    {
     ...
    }
    
     ...
    

    【讨论】:

      【解决方案2】:

      我以为你会想要;

      [KnownType(typeof(A))]
      public class B : A
      {
      ...
      }
      

      因为 B“是”A(出于 WCF 序列化的所有意图和目的)。但是,正如您目前所知道的那样,您是在说 A“是”B,但情况并非总是如此(即 typeof C),但在进一步调查中……我错了。

      我遇到过几次 Person : Contact 示例,我只是想搜索一下以确保我的理解是正确的,this link 以与您相同的方式显示语法(注释在基类上)。它以以下方式显示堆叠;

         1. [DataContract]
         2. [KnownType(typeof(Customer))]
         3. [KnownType(typeof(Person))]
         4. class Contact {...}
         5.  
         6. [DataContract]
         7. class Person : Contact {...}
      

      【讨论】:

        猜你喜欢
        • 2010-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多