1
votes

I have a Scneario like this in my Server DLL class library.

 [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()
    { 

    }
}

My WCF Proxy at client side creates a Reference class. It Renames "Info" to "Info1". And shows proper properties in Base class.My code compiles great. So far so good. When I try to run ChildProxy.Save() from my client it gives me error Saying

"There was an error while trying to serialize parameter http://tempuri.org/:info. The InnerException message was 'Type 'ClientServiceLayer.InfoService.Info' with data contract name 'ArrayOfInfo:http://schemas.datacontract.org/2004/07/Info_DLL' is not expected. Add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.'. Please see InnerException for more details. "

How to hide the property of base class in WCF?

UPDATE:

Here is the call on the client-side

InvoiceServiceClient infoProxy = new InfoServiceClient(); 
invId = invfoProxy.Save();
2
Yes We have a service Class on top of this class which call Save method..so intentionally didn't kept it...Here's the Code at client 'InvoiceServiceClient infoProxy = new InfoServiceClient(); invId = invfoProxy.Save();'Hakim

2 Answers

3
votes

As stated here:

You can't. Although the Child class is "hiding" the Info property of its base class, the attribute is being read by the serializer.

You could try adding [DataMember(Name = "Info")] to the child class and see what happens.

0
votes

You could use KnownType Attribute in your DataContract

MSDN Data Contract Known Types