2012-10-16 55 views
2

我的Android客户端试图将JSON类发布到我的wcf服务时出现问题。 下面是Android客户端的代码:为WCFAndroid JSON发布到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; } 

}

在我的WCF方法的参数TestModel TM总是空

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); 
} 

这里是代码。什么可能是错的?

+1

你检查了生成的json吗? – toadzky

+0

Yepp,它正在生成。 – Krika

回答

3

对象的包装(自从您指定WebMessageBodyStyle.Wrapped)是基于参数名称而不是参数类型完成的。最外面的JSON成员的名称应该是“tm”,而不是“TestModel”:

public HttpResponse TestPost() throws Exception 
{ 
    HttpPost httpost = new HttpPost(url+"/TestPost"); 

    JSONStringer img = new JSONStringer() 
     .object() 
     .key("tm") 
      .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); 
} 
+0

谢谢,错过了:)。我还需要将内容类型和内容编码设置为UTF-8才能让我工作。 StringEntity entity = new StringEntity(json.toString()); entity.setContentType( “应用程序/ JSON;字符集= UTF-8”); (新的BasicHeader(HTTP.CONTENT_TYPE,“application/json; charset = UTF-8”)); httpost.setEntity(entity); – Krika