2014-02-12 99 views
3

下面是我的WCF DataContract基类WCF衍生DataContract不基地DataContract的财产继承

[DataContract] 
    public class BaseClass 
    { 
     //some datamembers 
    } 

这里是我的派生类....

[DataContract] 
    public class DerivedClass1 : BaseClass 
    { 
     [DataMember] 
     public string ProductName{get;set;} 
    } 

由于需求的某些变化,我添加了一个派生类型,它也具有相同的属性'ProductName'。

所以代码结构,现在是....

[DataContract] 
     public class BaseClass 
     { 
      //some datamembers 
      [DataMember] 
      public string ProductName{get;set;} 
     } 

[DataContract] 
     public class DerivedClass1 : BaseClass 
     { 
      //[DataMember] 
      //public string ProductName{get;set;} property moved to base class 
     } 

[DataContract] 
      public class DerivedClass2 : BaseClass 
      { 
       //some datamembers specific to DerivedClass2 
      } 

让我感动财产“产品名称”基类。但是现在,当从客户端调用现有的datacontract时,返回Derivedclass1的列表,我没有看到productName作为响应。不知何故,我的DerivedClass1并没有影响base的productName属性。 可能是什么原因?我在编写代码时犯了什么错误?

+0

是否也用'DataMember'属性注释的基类成员?编辑:nevermind ...更仔细阅读帖子。您是否重新创建了来电者的服务参考? – mckeejm

+0

它工作正常!我试过了。没有问题 –

+0

你是什么意思'我没有看到productName的回应? 'ProductName'属性是否设置为null?你有没有更新客户端的代理定义? – YK1

回答

0

尝试在派生类上使用[KnownType(typeof(BaseClass))]]属性,并确保更新服务引用。

0

我已经试过这个,它工作正常!

Base Type

这里是子类SychRequests

Child class

这是我在智能感知得到。

Working

你缺少什么其他,什么都不能说。如果您无法看到ProductName,那么可能是因为您没有在您的请求中发送它。