Search code examples
c#.netrestwcf

WCF REST parameter object is null


I have created WCF REST API. I have implemented following service interface and service method for the API.

service interface:

[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
ObjAPI GetAPIRequest(ObjAPI objAPI)

service :

public ObjAPI GetAPIRequest(ObjAPI objAPI)
{
   return new ExternalAPI().GetAPIRequest(objAPI);
                
}

code of ObjAPI class

    [System.Runtime.Serialization.DataContract(Namespace = "")]
    public class ObjAPI
    {
        [System.Runtime.Serialization.DataMember]        
        public int ID { get; set; }   

        [System.Runtime.Serialization.DataMember]
        public Client Client { get; set; }       


    }
}

My ObjAPI contain another object Client, then I have passed Following XML to the service.

<ObjAPI> 
<ID> 1 </ID>
<Client> 
< ClientNumber>0067HA000001</ ClientNumber>
</Client > 
</ ObjAPI >

But in the GetAPIRequest method, ID field is getting its value and client object become null.

How can I fix this Issue?


Solution

  • [ServiceContract]
    public interface IInterface
    {
        [OperationContract]
        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
        ObjAPI GetAPIRequest(ObjAPI objAPI)
    }
    
    public class Service: IInterface
    {
        public ObjAPI GetAPIRequest(ObjAPI objAPI)
        {
           return new ExternalAPI().GetAPIRequest(objAPI);
        }
    }
    
    [System.Runtime.Serialization.DataContract(Namespace = "")]
    public class ObjAPI
    {
        [System.Runtime.Serialization.DataMember]        
        public int ID { get; set; }   
    
        [System.Runtime.Serialization.DataMember]
        public Client Client { get; set; }       
    }
    

    We also must set DataContract and DataMember attributes for Client class

    [System.Runtime.Serialization.DataContract(Namespace = "")]
    public class Client
    {
        [System.Runtime.Serialization.DataMember]        
        public string ClientNumber { get; set; }     
    }