Webservice返回json設置

一 、服務器端設置
    1.修改web.config
在web.config裏面的的system.Web節點添加 android

<webServices> 
       <protocols> 
         <add name= "HttpPost"/> 
         <add name= "HttpGet"/> 
       </protocols> 
     </webServices>
2.修改XX.asmx.cs
[WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]

//至此,通常函數可在android中能夠經過代碼返回json數據,返回datatable的函數不能夠
3.返回datatable的函數修改
此處須要用到一個函數將datatable轉換成json格式 web

#region dataTable轉換成Json格式
        ///     
        /// dataTable轉換成Json格式    
        ///     
        ///     
        ///     
        public string DataTableJson(DataTable dt)
        {
            StringBuilder jsonBuilder = new StringBuilder();
            jsonBuilder.Append("{\"");
            jsonBuilder.Append(dt.TableName.ToString());
            jsonBuilder.Append("\":[");
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                jsonBuilder.Append("{");
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    jsonBuilder.Append("\"");
                    jsonBuilder.Append(dt.Columns[j].ColumnName);
                    jsonBuilder.Append("\":\"");
                    jsonBuilder.Append(dt.Rows[i][j].ToString());
                    jsonBuilder.Append("\",");
                }
                jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
                jsonBuilder.Append("},");
            }
            jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
            jsonBuilder.Append("]");
            jsonBuilder.Append("}");
            return jsonBuilder.ToString();
        }
 
  #endregion
再將本來須要返回datatable的函數新建一個相似函數。此處注意,必定要寫
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)],否則android在獲取數據時系統又會將轉換好的json數據再加一層json。
好比

[WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
        public string HPReadQueryPhone(string strSql, string BD)
        {
            try
            {
                MSQuery dbTable = new MSQuery();
                DataSet dsTable = dbTable.HPReadQuery(strSql, BD);
                dbTable = null;
                if (dsTable.Tables.Count == 0)
                {
                    return "";
                }
                else
                {
                    return DataTableJson(dsTable.Tables[0]);
                }
            }
            catch (System.Exception err)
            {
                ThrowException(err);
                return null;
            }
        }
相關文章
相關標籤/搜索