【问题标题】:How to create JSON data with .NET?如何使用 .NET 创建 JSON 数据?
【发布时间】:2011-09-21 02:52:10
【问题描述】:

目前,我正在构建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# 编写的。

【问题讨论】:

  • @Tomalak,我的问题更适合如何使用 asmx 文件创建 json Web 服务,我在您发布的链接中没有看到。
  • 链接的线程回答了如何使用 .NET 生成 JSON。我认为这或多或少是你的问题。
  • @Tomalak,好的,谢谢,但这并没有回答我的问题,可能只有 33% 的问题得到了该链接的回答。
  • @Downvoters,请有足够的礼貌来解释你为什么投反对票。

标签: .net asp.net vb.net json .net-3.5


【解决方案1】:

我的盒子上没有 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

【讨论】:

    【解决方案2】:

    通常,使用 ASP.NET,您不应该做任何事情来序列化为 JSON。只需使用正确的类型发出您的请求,正确返回它,ASP.NET 就会为您序列化为 JSON。它也可以反序列化。

    【讨论】:

    【解决方案3】:

    你可以试试Json.NET。 它是.net 平台上非常流行的处理 json 对象的库。

    【讨论】:

    • 如果不下载额外的库,我该怎么做?
    【解决方案4】:

    JavaScriptSerializer Class

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

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

    【讨论】:

    • 基于 Tomalak 的推荐,我知道我可以使用该类将数组转换为 json。如何在该类中使用该数组之前将现有代码转换为数组?
    • 对不起,我不明白你的问题,你能改写一下吗?
    • 基于 Tomalak 评论,我知道我可以使用该类将数组转换为 json。如何在该类中使用该数组之前将现有代码转换为数组?
    • 改写的意思是“以另一种方式表达”:P
    • 在我可以使用 JavaScriptSerializer 类之前,我需要将我的 stringbuilder 转换为一个数组,我不知道该怎么做。
    【解决方案5】:
    猜你喜欢
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    相关资源
    最近更新 更多