目前,我正在构建json数据如下:
<%@ Page Language="VB" Debug="True" EnableViewState="false" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.IO" %>
<script runat="server">
Dim objSQLConnection As SqlConnection
Dim objSQLCommand As SqlCommand
Dim objSQLDataReader As SqlDataReader
Dim objJSONStringBuilder As StringBuilder
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Response.Clear()
Response.ContentType = "application/json"
Response.Write(get_json())
Response.End()
End Sub
Function get_json() As String
objJSONStringBuilder = New StringBuilder()
objSQLConnection = New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connString"))
objSQLCommand = New SqlCommand("sql query goes here", objSQLConnection)
objJSONStringBuilder.Append("[")
objSQLCommand.Connection.Open()
objSQLDataReader = objSQLCommand.ExecuteReader()
While objSQLDataReader.Read()
objJSONStringBuilder.Append("{")
objJSONStringBuilder.Append("""col1""")
objJSONStringBuilder.Append(":")
objJSONStringBuilder.Append("""" & objSQLDataReader("col1") & """")
objJSONStringBuilder.Append(",")
objJSONStringBuilder.Append("""col2""")
objJSONStringBuilder.Append(":")
objJSONStringBuilder.Append("""" & objSQLDataReader("col2") & """")
objJSONStringBuilder.Append(",")
objJSONStringBuilder.Append("""col3""")
objJSONStringBuilder.Append(":")
objJSONStringBuilder.Append("""" & objSQLDataReader("col3") & """")
objJSONStringBuilder.Append("},")
End While
objSQLDataReader.Close()
objSQLCommand.Connection.Close()
objJSONStringBuilder.Remove(objJSONStringBuilder.Length - 1, 1)
objJSONStringBuilder.Append("]")
Return objJSONStringBuilder.ToString
End Function
</script>
这是使用.NET创建JSON数据的首选方法吗?
我想我应该使用asmx web服务,并将数组转换为json?但我见过的所有例子都在C#中。
答案 0 :(得分:8)
通常,使用ASP.NET,您不应该执行任何序列化为JSON的操作。只需使用正确的类型提出请求,正确返回,ASP.NET将为您序列化为JSON。它也可以反序列化。
答案 1 :(得分:8)
我的盒子上没有VB,但是如果你想使用JavaScriptSerializer Class,你的项目必须针对.NET Framework 3.5或.NET Framework 4.0(不是.NET Framework 3.5 Client Profile既不是.NET Framework 4.0 Client Profile) 。将System.Web.Extensions.dll添加到引用。
C#中的一个例子是:
public String Index()
{
Object[] myArray = new Object[3];
myArray[0] = new { col1 = "foo", col2 = "bar" };
myArray[1] = new { col1 = "fizz", col2 = "buzz" };
myArray[2] = new { col1 = "fizz", col2 = "buzz" };
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(myArray);
}
此功能的输出为:
[{"col1":"foo","col2":"bar"},{"col1":"fizz","col2":"buzz"},{"col1":"fizz","col2":"buzz"}]
将其转换为VB应该很容易。
更新: VB版本:
Function get_json() As String
Dim myArray(2) As Object
myArray(0) = New With {Key .col1 = "foo", .col2 = "bar"}
myArray(1) = New With {Key .col1 = "fizz", .col2 = "buzz"}
myArray(2) = New With {Key .col1 = "fizz", .col2 = "buzz"}
Dim serializer As New JavaScriptSerializer()
Return serializer.Serialize(myArray)
End Function
输出相同,不要忘记导入System.Web.Script.Serialization
。
答案 2 :(得分:2)
您可以尝试Json.NET。 它是.net平台上处理json对象的一个非常流行的库。
答案 3 :(得分:0)
异步通信层在内部使用JavaScriptSerializer类来序列化和反序列化在浏览器和Web服务器之间传递的数据。您无法访问该序列化程序的实例。但是,此类公开了一个公共API。因此,如果要在托管代码中使用JavaScript Object Notation(JSON),则可以使用该类。
要序列化对象,请使用Serialize方法。若要反序列化JSON字符串,请使用Deserialize或DeserializeObject方法。要序列化和反序列化JavaScriptSerializer本身不支持的类型,请使用JavaScriptConverter类实现自定义转换器。然后使用RegisterConverters方法注册转换器。
答案 4 :(得分:0)
您是否尝试过DataContractJsonSerializer? http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer.aspx