如何使用.NET创建JSON数据?

8

目前,我正在构建以下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数据的首选方法吗?

我认为我应该使用将数组转换为JSON的asmx Web服务?但是我看到的所有示例都是用C#编写的。


可能是 如何在 VB.NET 中将数组编码为 JSON? 的重复问题。 - Tomalak
@Tomalak,我的问题更关注如何使用asmx文件创建json web服务,这一点在您发布的链接中没有看到。 - nami
链接的线程有关于如何使用.NET生成JSON的答案。我认为这或多或少是你的问题。 - Tomalak
@Tomalak,好的,谢谢,但那并没有回答我的问题,只有大概33%的问题被那个链接回答了。 - nami
@给踩负评的人,麻烦您有足够的礼貌解释一下为什么要这样做。 - nami
另请参阅System.Runtime.Serialization.Json命名空间 - ToolmakerSteve
5个回答

9

我没有VB,但是如果你想使用JavaScriptSerializer类,你的项目必须针对.NET Framework 3.5或.NET Framework 4.0(不是.NET Framework 3.5客户端配置文件或.NET Framework 4.0客户端配置文件)。将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


8
通常情况下,在ASP.NET中,您不需要进行任何JSON序列化操作。只需正确设置请求类型,正确返回结果,ASP.NET就会自动将其序列化为JSON格式。它还可以反序列化。

不错的观点... 看看这个 http://stackoverflow.com/questions/24175081/how-to-force-datatype-as-json-in-asp-net-2-0/24186964#24186964 - LCJ
该网站被谷歌标记为具有恶意内容。 - Malcolm Salvador
@Malky.Kid 谢谢你的关注。以前是可以的,但现在我已经将它删除了。 - Peter

2
您可以尝试使用Json.NET。这是一个非常流行的用于在 .net 平台上处理 json 对象的库。

我该如何在不下载额外库的情况下完成这个任务? - nami

0

JavaScriptSerializer类

JavaScriptSerializer类在异步通信层内部使用,用于序列化和反序列化在浏览器和Web服务器之间传递的数据。您不能访问序列化器的实例。但是,此类公开了公共API。因此,当您想要在托管代码中使用JavaScript对象表示法(JSON)时,可以使用该类。

要序列化对象,请使用Serialize方法。要反序列化JSON字符串,请使用Deserialize或DeserializeObject方法。要序列化和反序列化JavaScriptSerializer不本地支持的类型,请使用JavaScriptConverter类实现自定义转换器。然后使用RegisterConverters方法注册转换器。


根据Tomalak的评论,我了解到可以使用该类将数组转换为JSON。在使用该类之前,如何将我的现有代码转换为数组? - nami
抱歉,我不理解你的问题,请你重新表达一下吗? - vtortola
根据Tomalak的评论,我理解我可以使用该类将数组转换为JSON。在使用该类之前,我如何将我的现有代码转换为一个数组? - nami
重新表述意味着“用另一种方式表达”。 :P - vtortola
在我使用JavaScriptSerializer类之前,我需要将我的stringbuilder转换为数组,但我不知道如何做。 - nami


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接