我有这个代码在服务
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetJson(int nNumResults)
System.Web.Script.Serialization.JavaScriptSerializer serializer = new
System.Web.Script.Serialization.JavaScriptSerializer();
List<Dictionary<string, object>> rows =
new List<Dictionary<string, object>>();
Dictionary<string, object> row = null;
// load dataset from sql query (source not posted here)
DataSet dset = new DataSet();
dadapter.Fill(dset);
if (dset.Tables[0].Rows.Count < 1)
{
conn1.Close();
return null;
}
conn1.Close();
foreach (DataRow dr in dset.Tables[0].Rows)
{
row = new Dictionary<string, object>();
foreach (DataColumn col in dset.Tables[0].Columns)
{
row.Add(col.ColumnName.Trim(), dr[col]);
}
rows.Add(row);
}
return serializer.Serialize(rows);
}
一切都很好,除了返回的字符串是带有
的json<string xmlns="http://www.mysite.com/service">
和
</string>
最后。如果我删除这些标签,可以毫无问题地解析json。
如何在开头和结尾处获取没有xml标记的json字符串?
我使用Android的这个请求,它没有读取有效的JSON:
Map<String, Object> params = new HashMap<String, Object>();
params.put("nNumQuotes", "100");
aq.ajax(url, params, JSONObject.class, new AjaxCallback<JSONObject>() {
@Override
public void callback(String url, JSONObject json, AjaxStatus status) {
try {
String aJsonString = json.getString("Id");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
并且还通过集成服务测试和相同的结果从浏览器进行了测试。
答案 0 :(得分:1)
您是否在请求中添加了content-type
标题?
contentType: "application/json; charset=utf-8"
答案 1 :(得分:1)
您应该在标头中添加“accept: application/json;
”,以确保服务器知道您希望将数据恢复为JSON,只要您的Web服务实际上可以以JSON格式返回数据。
当您在浏览器中测试REST Web服务时(至少在chrome中),它会在标题中将“accept-type”设置为:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
通过使用类似Fiddler的测试,您可以将其更改为:
Accept: application/json
这可以告诉Web服务以JSON格式返回数据。你正在使用的android代码可能没有指定它想要JSON数据。同样,你可以使用fiddler来查看android代码请求的样子。
我刚刚发现这篇关于类似问题的帖子:ASP.NET JSON web service always return the JSON response wrapped in XML