在WCF中使用new关键字隐藏基类属性

时间:2011-09-20 14:41:59

标签: c# .net wcf

我的服务器DLL类库中有一个像这样的Scneario。

 [DataContract]
public class Base
{
    [DataMember]
    public string Info { get; set; }
}

[DataContract]
public class Child : Base
{
    [DataMember]
    public new int Info { get; set; }


    public int Save()
    { 

    }
}

客户端的我的WCF代理创建了一个Reference类。它将“Info”重命名为“Info1”。并在Base类中显示适当的属性。我的代码编译很好。到现在为止还挺好。当我尝试从我的客户端运行ChildProxy.Save()时,它给出了错误Saying

“尝试序列化参数http://tempuri.org/:info时出错.InitoutException消息是'Type'ClientServiceLayer.InfoService.Info',数据协定名称为'ArrayOfInfo:http://schemas.datacontract.org/2004 / 07 / Info_DLL'不是预期的。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。'。请参阅InnerException以获取更多细节。 “

如何在WCF中隐藏基类的属性?

更新:

这是客户端的电话

InvoiceServiceClient infoProxy = new InfoServiceClient(); 
invId = invfoProxy.Save();

2 个答案:

答案 0 :(得分:2)

如上所述here

你做不到。尽管Child类“隐藏”了其基类的Info属性,但序列化程序正在读取该属性。

您可以尝试将[DataMember(Name =“Info”)]添加到子类中,看看会发生什么。

答案 1 :(得分:0)

您可以在 DataContract

中使用 KnownType属性

MSDN Data Contract Known Types