VB.Net JSON 序列化格式

VB.Net Json Serialization Format

本文关键字:格式 序列化 JSON Net VB      更新时间:2023-09-26

我希望有人能够为我指出关于 JSON 格式的正确方向。

我以前从未真正使用过 Json 和序列化,所以这一切都有点新。

我需要以以下格式从 .Net 返回一个 Json。

[[Date.UTC(2011,12,14,8), 8], [Date.UTC(2011,12,14,9), 1]]

我快到了,但正在为字符串的格式而苦苦挣扎,因为默认情况下字符串是用引号括起来的。这是我所拥有的:

        Dim oSerializerDt As New JavaScriptSerializer()
        Dim dt As New DataTable
        dt.Columns.Add("Date", GetType(String))
        dt.Columns.Add("Count", GetType(Integer))
        objresults.GetResults(id, period)
        Dim listResults As New List(Of Object())
        Dim newDate As String
        For Each result As Application.NewResults In objresults
            newDate = "Date.UTC(" + result.EventDate.Year.ToString + "," + result.EventDate.Month.ToString + "," + result.EventDate.Day.ToString + "," + result.EventDate.Hour.ToString + ")"
            listResults.Add({newDate, result.Count})
        Next
        Return oSerializerDt.Serialize(listResults)

这将按如下方式返回 Json,除了时间字符串周围的双引号之外,这是完美的。

[["Date.UTC(2011,12,14,8)",8],["Date.UTC(2011,12,14,9)",11]]

如果有人能指出我如何更改代码以使字符串正确格式化的正确方向,我将不胜感激。

谢谢。

将 Linq 与 StringBuilder 结合使用,如下所示:

    Dim query = db.Employees.Select(Function(q) New With {q.EmployeeID, q.LastName}).ToList()
    Dim json As New JavaScriptSerializer
    Dim sb As New StringBuilder
    For Each rows In query
    sb.Append(rows.LastName)
    Next
    Dim strjson As String = json.Serialize(Convert.ToString(sb))
    Response.Write(strjson)

你想要的不是有效的JSON(引号外的"日期" - 请参阅 http://www.json.org 的规范),所以你不能真正使用JSON序列化程序来做到这一点。您可能需要做的是进行一些简单的字符串操作:

Dim dt As New DataTable 
dt.Columns.Add("Date", GetType(String)) 
dt.Columns.Add("Count", GetType(Integer)) 
objresults.GetResults(id, period) 
Dim listResults As New List(Of String)
Dim newDate As String 
For Each result As Application.NewResults In objresults 
    newDate = "Date.UTC(" + result.EventDate.Year.ToString + "," + result.EventDate.Month.ToString + "," + result.EventDate.Day.ToString + "," + result.EventDate.Hour.ToString + ")" 
    listResults.Add(String.Format("[{0}, {1}]", newDate, result.Count)
Next
Return "[" + String.Join(", ", listResults) + "]"