I having a problem with my android client trying to post a JSON class to my wcf service.
Here is the code for android client :
public HttpResponse TestPost() throws Exception
{
HttpPost httpost = new HttpPost(url+"/TestPost");
JSONStringer img = new JSONStringer()
.object()
.key("TestModel")
.object()
.key("p1").value("test")
.key("p2").value("test")
.key("p3").value(1)
.key("p4").value("test")
.key("p5").value(2)
.key("p6").value("test;test")
.endObject()
.endObject();
StringEntity se = new StringEntity(img.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
return httpclient.execute(httpost);
}
Here is code for Wcf
[OperationContract]
[WebInvoke(Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "TestPost")]
void TestPost(TestModel tm);
[DataContract]
public class TestModel
{
[DataMember(Name = "p1")]
public string p1 { get; set; }
[DataMember(Name = "p2")]
public string p2{ get; set; }
[DataMember(Name = "p3")]
public int p3 { get; set; }
[DataMember(Name = "p4")]
public string p4 { get; set; }
[DataMember(Name = "p5")]
public int p5 { get; set; }
[DataMember(Name = "p6")]
public string p6 { get; set; }
}
In my wcf method the parameter TestModel tm is always null. What could possibly be wrong?
The wrapping of the object (since you specified
WebMessageBodyStyle.Wrapped) is done based on the parameter name, not the parameter type. The name of the outermost JSON member should be “tm”, not “TestModel”: