我将我的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
答案 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;
}