我的服务器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();
答案 0 :(得分:2)
如上所述here:
你做不到。尽管Child类“隐藏”了其基类的Info属性,但序列化程序正在读取该属性。
您可以尝试将[DataMember(Name =“Info”)]添加到子类中,看看会发生什么。
答案 1 :(得分:0)
您可以在 DataContract
中使用 KnownType属性