asp.net中webservice与android的json数据交互方式设置
一 、服务器端设置
1.修改web.config
在web.config里面的的system.Web节点添加
<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格式
#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; } }
二、android代码写法
try{ String SERVER_URL = "http://192.168.10.33:81/MobileService/MSServiceQuery.asmx/HPReadQueryPhone"; HttpPost request = new HttpPost(SERVER_URL); // 根据内容来源地址创建一个Http请求 request.addHeader("Content-Type", "application/json; charset=utf-8");//必须要添加该Http头才能调用WebMethod时返回JSON数据 JSONObject jsonParams=new JSONObject(); // jsonParams.put("strdate", "1"); // jsonParams.put("aa", "1"); jsonParams.put("strSql", "select * from RRUser");//传参,如果想传递两个参数则继续添加第二个参数jsonParams.put("param2Name","param2Value") jsonParams.put("BD", "27"); HttpEntity bodyEntity =new StringEntity(jsonParams.toString(), "utf8");//参数必须也得是JSON数据格式的字符串才能传递到服务器端,否则会出现"{'Message':'strUserName是无效的JSON基元'}"的错误 Log.i("ex",jsonParams.toString()); request.setEntity(bodyEntity); HttpResponse httpResponse = new DefaultHttpClient().execute(request); // 发送请求并获取反馈 ShowMessage(httpResponse.getStatusLine().toString()); if(httpResponse.getStatusLine().getStatusCode()==200) { String result = EntityUtils.toString(httpResponse.getEntity()); Log.i("ex", result); ShowMessage(result); if(!result.equals("")) { try { JSONArray jsonObjs = new JSONObject (result).getJSONArray("Table"); JSONObject jsonObj = ((JSONObject)jsonObjs.opt(0)); String username=jsonObj.getString("UserCname"); ShowMessage(username);
Log.i("ex",String.valueOf(jsonObjs.length())+"aa");
} catch(JSONException e) { ShowMessage("数据错误"); } } } else { ShowMessage("网络传输错误"); } } catch(Exception e) { Log.i("ex", e.getMessage()); }
asp.net中webservice与android的json数据交互方式设置的更多相关文章
- android基础---->JSON数据的解析
上篇博客,我们谈到了XML两种常用的解析技术,详细可以参见我的博客(android基础---->XMl数据的解析).网络传输另外一种数据格式JSON就是我们今天要讲的,它是比XML体积更小的数据 ...
- Android 之 json数据的解析(jsonReader)
json数据的解析相对而言,还是比较容易的,实现的代码也十分简单.这里用的是jsonReade方法来进行json数据解析. 1.在解析之前,大家需要知道什么是json数据. json数据存储的对象是无 ...
- EasyUI学习笔记(1)----Tree控件实现过程中.NET下无法访问json数据的解决办法
直接调用官网的Demo中的方法 , 将json数据存储在同目录下,但是在运行之后树没有出现,用FireBug调试,错误如下 不允许访问json数据,刚开始以为是权限不够,然后又给解决方案所在的文件夹设 ...
- 使用Servlet根据浏览器request的get方法获取值,将磁盘中与之对应的json数据删除的方法
package com.swift; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStrea ...
- ASP.NET中WebService的创建和部署以及通过反射动态调用WebService
一.在ASP.NET中创建WebService 首先我们先创建一个ASP.NET Web 应用程序,此处我们以VS2017为例 点击新创建的项目,右键添加新建项,选择Web服务,输入名称后点击添加 这 ...
- ASP.NET中WebService的两种身份验证方法
一.通过SOAP Header身份验证 此方法是通过设置SOAP Header信息来验证身份,主要通过以下几步: 1.在服务端实现一个SOAP Header类 public class Credent ...
- Android 实现Json数据解析,并进行应用!
从网站上获取数据然后再客户端进行解析是常见的数据交互.下面是常用的一些接口网址: webservice工厂接口 http://www.36wu.com 快递查询接口http://webservice. ...
- Android系列---JSON数据解析
您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...
- Android - 服务器json数据交互.
一,服务器端 服务器端使用的是Servlet,封装json对象使用的 'json-lib-2.2.2-jdk15.jar,ezmorph-1.0.4.jar,commons-logging-1.1.j ...
随机推荐
- 对同一元素设置overflow-x:hidden,overflow-y:visible;属性值不生效
作者:孙志勇 微博 日期:2016年12月5日 一.时效性 所有信息都具有时效性.文章的价值,往往跟时间有很大关联.特别是技术类文章,请注意本文创建时间,如果本文过于久远,请读者酌情考量,莫要浪费时间 ...
- AJAX顺序输出
转载:http://www.cnblogs.com/niunan/archive/2010/10/13/1849873.html AJAX顺序输出 在安装大多数CMS的时候都会在安装界面上看到这样的 ...
- cocos2d-x 1970毫秒数转时间
转自:http://www.cocos2dev.com/?p=322 做网络游戏时,服务器的时间在本地显示的时候要转成本地时间,可以利用系统函数转化. ";//假如这是服务器的时间 ] = ...
- MySQL几个注意点
1.在创建表.对表进行操作之前,必须首先选择数据库.通过 mysql_select_db() 函数选取数据库.当您创建 varchar 类型的数据库字段时,必须规定该字段的最大长度,例如:varcha ...
- Codeforces Round #280 (Div. 2) E. Vanya and Field 数学
E. Vanya and Field Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/492/pr ...
- UOJ 08 Quine 是在下输了
#8. Quine Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/8 Description 写一个程序,使其能 ...
- Android监听SD卡文件变化
今天再一次使用到FileObserver,上一次使用还是很久之前了.总结一下FileObserver里留的一些“坑” 1.FileObserver只能监听一个目录下的“一级”子文件,也就是说Fil ...
- JUnit中测试异常抛出的方法
最近在做TWU关于TDD的作业,对JUnit中测试异常抛出的方法进行了一些学习和思考. 在进行单元测试的时候有的时候需要测试某一方法是否抛出了正确的异常.例如,我有一个方法,里面对一个List进行读取 ...
- 用CSV文件读写数据的两种方式(转)
导读:有时候我们需要对收集的数据做统计,并在页面提供显示以及下载.除了对传统的excel存取之外,对CSV文件的存取也很重要.本文列出了这两种操作的详细代码. 代码: <?php $file = ...
- Key Task
Problem Description The Czech Technical University is rather old - you already know that it celebrat ...