簡體   English   中英

ASP.NET Service使用xml標頭返回JSON數據

[英]ASP.NET Service returns JSON data with xml header

我有這個代碼在服務

 [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();
    }

        }
    });

並且還通過集成服務測試和相同的結果從瀏覽器進行了測試。

您是否在請求中包含content-type標題?

contentType: "application/json; charset=utf-8"

您應該在標頭中添加“ 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服務總是返回用XML包裝的JSON響應

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM