2

JSON クラスを wcf サービスに投稿しようとしている Android クライアントに問題があります。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 は常に null です。何が間違っている可能性がありますか?

4

1 に答える 1

3

( を指定したため) オブジェクトのラッピングは、パラメーターの型ではなく、パラメーターWebMessageBodyStyle.Wrappedに基づいて行われます。最も外側の JSON メンバーの名前は、「TestModel」ではなく「tm」にする必要があります。

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 に答える