【问题标题】:VB.Net Json Serialization FormatVB.Net Json 序列化格式
【发布时间】:2012-05-16 14:51:32
【问题描述】:

我希望有人能指出关于 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]]

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

谢谢。

【问题讨论】:

  • 您检查过 Newtonsoft JSON 序列化程序了吗?这可能会有所帮助。
  • 谢谢。我对 Newtonsoft 序列化程序进行了一些尝试,但似乎仍然无法获得所需格式的 JSON。这是你知道可以用它做的事情吗?关于其他可以让我通过 Ajax 以该格式返回的方法的任何想法?
  • 抓着稻草...您是否尝试将 List(Of Object) 更改为 List(Of String)?
  • 是的尝试过,但正如预期的那样,它也会将整数用引号括起来。
  • 是否有过您确实需要字符串中的双引号的情况?如果不是,那么您可以在返回最终字符串之前替换 "

标签: javascript asp.net vb.net json serialization


【解决方案1】:

像这样将 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)

【讨论】:

    【解决方案2】:

    您想要的不是有效的 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) + "]"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      相关资源
      最近更新 更多