2

我的 android 客户端尝试将 JSON 类发布到我的 wcf 服务时遇到问题。这是android客户端的代码:

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

这是 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 始终为空。什么可能是错的?

4

1 回答 1

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); 
} 
于 2012-10-16T22:24:57.663 回答