Android JSON 发布到 WCF 服务

标签 android json wcf post

我的 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 始终为 null。可能出了什么问题?

最佳答案

对象的包装(因为您指定了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); 
} 

关于Android JSON 发布到 WCF 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12922570/

相关文章:

java - 工具栏重叠内容

json - 有一种干净的DRY方法可以从HTTP请求JSON更新多个textViews吗?

arrays - Golang 在 json 响应中获取数组索引值

c# - 远程服务器上的 WCF 服务返回 400,在本地工作正常

c# - 使用来自 Azure 网站实例的客户端证书

Android 父 Activity 历史堆栈问题

java - Libgdx : . for 循环内的 Flip()

android - Gradle不选择在lib文件夹下动态复制的库

c# - 在innerXML 中获取引号以作为“

javascript - 使用 JSON 数据绘制 Highchart 多系列折线图