如何使用 .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?