gpt4 book ai didi

asp.net - VB.Net SQL 结果为 Ajax 的 JSON

转载 作者:行者123 更新时间:2023-12-03 23:25:28 25 4
gpt4 key购买 nike

新程序员,我正在使用 VB.Net 代码构建一个 aspx 页面,我正在尝试使用我们数据库中的数据创建一个 D3 图表,但我无法将返回值转换为正确的格式。

在我的 VB 代码中,我可以将字符串转换为我想要的确切格式:

[{ name: "PROAIR", value: 7}],{ name: "NASONEX", value: 4}] 

但是当我把它传回去时,结果是:
{"d":"[{name: \"PROAIR\", value: 7},{name: \"NASONEX\", value: 4}]"}

我知道(现在)它正在尝试序列化返回值,所以我尝试使用数据表并序列化它,然后使用 List(Of Object) 并序列化它,但每次我得到不同的结果时,更多的引号和转义退格返回值。我已经查看了 Microsoft Person 示例和一些 Stack Contacts 示例,但是我真的有必要构建一个全新的类并向其中添加新项目吗?
我的字符串生成器代码如下:
Dim sData As String
Dim sqlCmd As New SqlCommand(strSql, cn)
Using sdr As SqlDataReader = sqlCmd.ExecuteReader()
Dim sb As New StringBuilder()
sb.Append("[")
While sdr.Read()
sb.Append("{")
System.Threading.Thread.Sleep(50)
sb.Append(String.Format("name: '{0}', value: {1}", sdr(0), sdr(1)))
sb.Append("},")
End While
sb = sb.Remove(sb.Length - 1, 1)
sb.Append("]")
sData = sb.ToString
sData = sData.Replace("'", ControlChars.Quote)
cn.Close()

Return sData
End Using

如果我尝试序列化该字符串:
Dim serializer As New JavaScriptSerializer()
Dim SerializedResult = serializer.Serialize(sData)
Return SerializedResult

我最终得到: {"d":"\"[{name: \\\"PROAIR\\\", value: 7},{name: \\\"NASONEX\\\", value: 4}]\""}
我试图反序列化它
Dim deserializedResult = serializer.Deserialize(Of String)(sData)
但它因数组类型失败而出错,所以显然你不能这样做:)

在 aspx 页面中,我进行了硬编码:
success: function (r) {
var data = [{ name: "PROAIR", value: 7}],{ name: "NASONEX", value: 4}]

我的图表构建完美,所以只需以正确的格式返回 sql 数据并将脚本代码更改为 var data = r;

编辑 工作代码如下:

aspx页面:


    $(function () {
GetData();
});

function GetData() {
$.ajax({
type: "post",
url: "D3PieChart.aspx/GetData",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (r) {

data = r.d;
data = jQuery.parseJSON(data)

-- Build D3 chart commands in this section --

},
error: function (xhr, status, error) {
OnFailure(error);
alert('Error');
}
});
}

</script>

VB页面:
<WebMethod()> _
Public Shared Function GetData() As String

Dim sConnect As String = ConfigurationManager.ConnectionStrings("SQLConnectionString").ConnectionString
Dim cn As New SqlConnection(sConnect)
Dim strSql As String = "SELECT name and a count of stuff "
strSql += "FROM a bunch of tables WHERE stuff = stuff "

Dim dtb As New DataTable
cn.Open()
If (cn.State And ConnectionState.Open) <> 0 Then
Dim sqlCmd As New SqlCommand(strSql, cn)
Dim sqlDad As New SqlDataAdapter(sqlCmd)
sqlDad.Fill(dtb)
dtb.Columns(0).ColumnName = "Name"
dtb.Columns(1).ColumnName = "value"
Dim sjData As String = GetJson(dtb)
Return sjData
End If
Return -1
End Function



Public Shared Function GetJson(ByVal dt As DataTable) As String
Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer()
serializer.MaxJsonLength = Integer.MaxValue

Dim rows As New List(Of Dictionary(Of String, Object))()
Dim row As Dictionary(Of String, Object) = Nothing
Dim row2 As Dictionary(Of Integer, Object) = Nothing
For Each dr As DataRow In dt.Rows
row = New Dictionary(Of String, Object)()
row2 = New Dictionary(Of Integer, Object)()
For Each dc As DataColumn In dt.Columns
row.Add(dc.ColumnName.Trim(), dr(dc))
Next
rows.Add(row)
Next
Return serializer.Serialize(rows)
End Function
End Class

这是一个简单的图表,它不接受任何硬编码的参数,但它从 SQL Server 数据库中提取图表数据。

最佳答案

在数据表中获取您的 Sql 结果,并将其简单地传递给 GetJson 方法以获取 json 字符串。

Dim da As New OleDb.OleDbDataAdapter(strSql, cn)
Dim dt As DataTable = New DataTable
da.Fill(dt)

Dim sData As string = GetJson(dt)



Public Shared Function GetJson(ByVal dt As DataTable) As String
Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer()
serializer.MaxJsonLength = Integer.MaxValue

Dim rows As New List(Of Dictionary(Of String, Object))()
Dim row As Dictionary(Of String, Object) = Nothing
For Each dr As DataRow In dt.Rows
row = New Dictionary(Of String, Object)()
For Each dc As DataColumn In dt.Columns

row.Add(dc.ColumnName.Trim(), dr(dc))

Next
rows.Add(row)
Next
Return serializer.Serialize(rows)
End Function

添加 System.Collections.Generic 的引用

在aspx页面
success: function (r) {
var data = r.d;

关于asp.net - VB.Net SQL 结果为 Ajax 的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23523217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com