Android连接 - WCF服务应该返回JSON

时间:2010-09-12 21:21:35

标签: c# android json wcf

我将我的Android应用程序连接到wcf服务,在我的Log.i中,我可以看到它返回正确的数据,我唯一想把它作为JSON处理,但我的服务以XML格式发送 - (我认为):这就是应用程序中的代码的样子:

if (entity != null) 
{
    InputStream instream = entity.getContent();  
    BufferedReader reader = new BufferedReader(new InputStreamReader(instream));  
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null){
        sb.append(line + "n");  
    }      

    String result = sb.toString();  
    Log.i(TAG,result);  
    instream.close();  

    JSONObject json=new JSONObject(result);  

    JSONArray nameArray=json.names();  
    JSONArray valArray=json.toJSONArray(nameArray);  

我的示例方法看起来像这样,我不知道如何从WCF webserivce返回正确的JSON数据:

/// <returns>An enumeration of the (id, item) pairs. Returns null if no items are present</returns>
protected override IEnumerable<KeyValuePair<string, SampleItem>> OnGetItems()
{
    // TODO: Change the sample implementation here
    if (items.Count == 0)
    {
        items.Add("A", new SampleItem() { Value = "A" });
        items.Add("B", new SampleItem() { Value = "B" });
        items.Add("C", new SampleItem() { Value = "C" });
    }
    return this.items;
}

这是我得到的错误: 09-12 17:11:04.924:WARN / System.err(437):org.json.JSONException:类型为java.lang.String的值&lt; ItemInfoList无法转换为JSONObject

3 个答案:

答案 0 :(得分:1)

添加:

 [WebGet(ResponseFormat = WebMessageFormat.Json)]

作为WCF服务方法的属性。如果您没有使用GET请求来调用服务,请将WebGet更改为WebInvoke。

答案 1 :(得分:1)

这看起来像是来自WCF REST Starter Kit,REST Collection模板的代码,所以它应该已经支持XML和JSON。它是您在客户端指定的服务URI,它返回XML或JSON表示。默认情况下它会发送XML,但是如果你在服务URI和服务URI上放置“?format = json”,它就会以JSON格式发送资源。

您可以使用服务URI后的/ help使用ATOM中返回的服务的内置描述(如果我记得很清楚)来获取有用的信息 就像是: http://localhost/servicetest/Service.svc/help

答案 2 :(得分:0)

这就是wcf服务方法的样子:这会返回一组值。我添加了[WebGet(ResponseFormat = WebMessageFormat.Json)],但它仍无效。

[WebGet(ResponseFormat = WebMessageFormat.Json)]
    protected override IEnumerable<KeyValuePair<string, SampleItem>> OnGetItems()
    {
        // TODO: Change the sample implementation here
        if (items.Count == 0)
        {
            items.Add("A", new SampleItem() { Value = "A" });
            items.Add("B", new SampleItem() { Value = "B" });
            items.Add("C", new SampleItem() { Value = "C" });
        }
        return this.items;
    }