如何创建返回JSON格式数据的ASP.NET Web服务?
答案 0 :(得分:1)
最重要的是要了解如何以JSON格式表示数据。 请参考http://www.json.org/了解更多信息。
一旦你理解了这一点,那么剩下的部分就很简单了。
请查看以下网址以获取相同的示例。
http://www.ajaxprojects.com/ajax/tutorialdetails.php?itemid=264
http://code.msdn.microsoft.com/JSONSampleDotNet
http://www.phdcc.com/xml2json.htm
我推荐Jquery库。它是一个轻量级的丰富库,支持调用Web服务,处理json数据格式输出等。
请访问www.jquery.com获取更多信息。
答案 1 :(得分:1)
.NET 3.5内置了支持。对于.NET 2.0,需要额外的库。我使用了Jayrock库。
我最近发布了一个应用程序,它在浏览器中使用纯Javascript(即使用AJAX技术,但不使用Microsoft AJAX或Scriptaculous等),后端与后端的Microsoft Web服务结合使用。当我开始写这篇文章时,我是.NET的新世界,并且感到被那里的所有框架所震撼!所以我强烈要求使用一些小型库而不是非常大的框架。
在javascript应用程序中,我调用这样的Web服务。它直接读取Web服务的输出,删除非JSON部分,然后使用https://github.com/douglascrockford/JSON-js/blob/master/json2.js来解析JSON对象。
这不是一种标准方法,但是很容易理解,并且可能对您有用,无论是使用还是仅仅是为了了解Web服务和JSON。
// enclosing html page has loaded this:
<script type="text/javascript" src="res/js/json2.js"></script>
// Invoke like this:
// var validObj = = callAnyWebservice("WebServiceName", "");
// if (!validObj || validObj.returnCode != 0) {
// alert("Document number " + DocId + " is not in the vPage database. Cannot continue.");
// DocId = null;
// }
function callAnyWebservice(webserviceName, params) {
var base = document.location.href;
if (base.indexOf(globals.testingIPaddr) < 0) return;
gDocPagesObject=null;
var http = new XMLHttpRequest();
var url = "http://mywebserver/appdir/WebServices.asmx/" + webserviceName;
//alert(url + " " + params);
http.open("POST", url, false);
http.setRequestHeader("Host", globals.testingIPaddr);
http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http.setRequestHeader("Content-Length", params.length);
// http.setRequestHeader("Connection", "close");
//Call a function when the state changes.
http.onreadystatechange = function() {
if (http.readyState == 4 ) {
if (http.status == 200) {
var JSON_text = http.responseText;
var firstCurlyQuote = JSON_text.indexOf('{');
JSON_text = JSON_text.substr(firstCurlyQuote);
var lastCurlyQuote = JSON_text.lastIndexOf('}') + 1;
JSON_text = JSON_text.substr(0, lastCurlyQuote);
if (JSON_text!="")
{
//if (DEBUG)
// alert(url+" " +JSON_text);
gDocPagesObject = eval("(" + JSON_text + ")");
}
}
else if (http.readyState == 4)
{alert(http.readyState + " " + http.status + " " + http.responseText)}
}
}
http.send(params);
if (gDocPagesObject != null) {
//alert(gDocPagesObject.returnCode + " " + gDocPagesObject.returnString);
return gDocPagesObject;
}
else
return "web service unavailable: data not ready";
}
答案 2 :(得分:0)
在我们的项目中,需求如下 - 服务器上的ASP.NET 2.0和浏览器上的纯Javascript(没有JQuery库或.NET AJAX)
在服务器端的情况下,只需标记webmethod即可使用JSON。请注意,输入和输出参数都是json格式的
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public String Foo(String p1, String p2)
{
return "Result: p1= " + p1 + " p2= " + p2;
}
在javascript方面,使用常规的XmlHttpRequest对象,确保将输入参数格式化为JSON并在输出参数上执行'eval'。
var httpobj = getXmlHttpRequestObject();
//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject()
{
if (window.XMLHttpRequest)
return new XMLHttpRequest();
else if(window.ActiveXObject)
return new ActiveXObject("Microsoft.XMLHTTP");
}
CallService()
{
//Set the JSON formatted input params
var param = "{'p1' : 'value1', 'p2' : 'value2'}";
//Send it to webservice
if(httpobj.readyState == 4 || httpobj.readyState == 0)
{
httpobj.open("POST", 'service.asmx/' + 'Foo', true);
//Mark the request as JSON and UTF-8
httpobj.setRequestHeader('Content-Type','application/json; charset=utf-8');
httpobj.onreadystatechange = OnSuccess;
httpobj.send(param);
}
}
OnSuccess()
{
if (httpobj.readyState == 4)
{
//Retrieve the JSON return param
var response = eval("(" + httpobj.responseText + ")");
}
}