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

Posted

技术标签:

【中文标题】如何使用 .NET 创建 JSON 数据?【英文标题】:How to create JSON data with .NET? 【发布时间】: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# 编写的。

【问题讨论】:

How can I encode an Array in VB.NET to JSON?的可能重复 @Tomalak,我的问题更适合如何使用 asmx 文件创建 json Web 服务,我在您发布的链接中没有看到。 链接的线程回答了如何使用 .NET 生成 JSON。我认为这或多或少是你的问题。 @Tomalak,好的,谢谢,但这并没有回答我的问题,可能只有 33% 的问题得到了该链接的回答。 @Downvoters,请有足够的礼貌来解释你为什么投反对票。 【参考方案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。它也可以反序列化。

【讨论】:

好点...看看这个***.com/questions/24175081/… 网站已被谷歌标记为包含恶意内容。 @Malky.Kid 感谢您的关注。以前没问题,但我现在删除了它。【参考方案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】:

你试过 DataContractJsonSerializer 吗? http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer.aspx

【讨论】:

以上是关于如何使用 .NET 创建 JSON 数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 c# ASP.Net 中使用有效的 JSON 输出创建 JSON WebService 并使用 JQuery/Ajax 进行查询

如何使用 C# 在 ASP.NET 3.5 中动态设置“application/ld+json”Schema.org 元数据

如何将 HTML 表转换为 JSON 并将 JSON 与 JSON.NET 一起使用?

如何在没有 ASP.NET Core 的情况下将 Json 数据从控制器发送到 javascript?

如何从 ASP.net MVC 程序中获取纯 c# 程序中的 JSON 数据?

如何使用 json.net 将数据表转换为 json 字符串?