0
我在ASP.Net 3.5中有一個Web服務,我無法正確生成JSON。 格式正確,但在嘗試訪問$時仍不起作用。阿賈克斯。我的懷疑是,標題仍然是XML,我不明白爲什麼。 下面的代碼:Asp.net 3.5和JSON中的Web服務
Web服務:
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Data
Imports System.IO
Imports System.Runtime.Serialization.Json
<System.Runtime.Serialization.DataContractAttribute()> _
Public Class Estado
Dim _ID As Integer = 0
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property ID() As Integer
Get
Return _ID
End Get
Set(value As Integer)
_ID = value
End Set
End Property
Dim _Descricao As String = ""
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property Descricao() As String
Get
Return _Descricao
End Get
Set(value As String)
_Descricao = value
End Set
End Property
Dim _UF As String
<System.Runtime.Serialization.DataMemberAttribute()> _
Public Property UF() As String
Get
Return _UF
End Get
Set(value As String)
_UF = value
End Set
End Property
End Class
' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
' <System.Web.Script.Services.ScriptService()> _
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Service
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function HelloWorld() As String
Return "Hello World"
End Function
<WebMethod()> _
<Script.Services.ScriptMethod(ResponseFormat:=System.Web.Script.Services.ResponseFormat.Json)> _
Public Function getStates() As String
Try
Dim ds As New System.Data.DataSet
Dim strConexao As String = ""
strConexao = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
Dim conexao As System.Data.SqlClient.SqlConnection = New Data.SqlClient.SqlConnection()
conexao.ConnectionString = strConexao
conexao.Open()
Dim cmd As System.Data.SqlClient.SqlCommand = New Data.SqlClient.SqlCommand
cmd.CommandText = "Select ID, Descricao, UF From dbo.States"
cmd.CommandTimeout = 120
cmd.Connection = conexao
Dim adp As System.Data.SqlClient.SqlDataAdapter = New Data.SqlClient.SqlDataAdapter()
adp.SelectCommand = cmd
adp.Fill(ds)
Dim obj As List(Of Estado) = New List(Of Estado)
For Each dr As DataRow In ds.Tables(0).Rows
Dim e As Estado = New Estado()
e.ID = dr.Item("ID")
e.Descricao = dr.Item("Descricao")
e.UF = dr.Item("UF")
obj.Add(e)
Next
Dim strRetorno As String = getJSON(obj)
Return strRetorno
Catch ex As Exception
Return "Deu Merda: " + ex.Message
End Try
End Function
Private Function getJSON(obj As Object) As String
'yourobject is your actual object you want to serialize to json
Dim serializer As DataContractJsonSerializer = New DataContractJsonSerializer(obj.GetType())
'create a memory stream
Dim ms As MemoryStream = New MemoryStream()
'serialize the object to memory stream
serializer.WriteObject(ms, obj)
'convert the serizlized object to string
Dim jsonString As String = Encoding.Default.GetString(ms.ToArray())
'close the memory stream
ms.Close()
Return jsonString
End Function
End Class
網頁:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WS_JSON_Teste._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.8.22/themes/base/jquery-ui.css" type="text/css" media="all" />
<link rel="stylesheet" href="http://static.jquery.com/ui/css/demo-docs-theme/ui.theme.css" type="text/css" media="all" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
<script src="http://code.jquery.com/ui/1.8.22/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function ($) {
$.ajax({
type: "POST",
url: "http://localhost:27916/WS_JSON/Service.asmx/getStates",
contentType: "application/jsonp; charset=utf-8",
dataType: "jsonp",
success: function (data) {
alert("success!");
},
failure: function (error) {
alert("failure!");
}
});
});
</script>
我用這個link作爲參考。
ASMX是一項傳統技術,不應該用於新開發。 WCF應該用於Web服務客戶端和服務器的所有新開發。一個暗示:微軟已經在MSDN上退役了[ASMX Forum](http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/threads)。 –
你的Ajax是否失敗或是數據以字符串形式返回? –