2012-05-16 7 views
0

Я надеялся, что кто-то сможет указать мне в правильном направлении относительно формата Json.VB.Net Json Serialization Format

Я никогда не работал с Json's и Serialization раньше, так что это все немного новое.

Мне нужно вернуть Json из .Net в следующем формате.

[[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]] 

Если кто-то может мне точку в правильном направлении, как я могу изменить мой код, чтобы строки отформатированы правильно, я бы очень признателен.

Спасибо.

+0

Вы проверили сериализатор Newtonsoft JSON? Это может помочь. – markp3rry

+0

Спасибо за это. Я немного поиграл с сериализатором Newtonsoft, но по-прежнему не могу получить JSON в требуемом формате. Можно ли это сделать с этим? Любые идеи по другим подходам, которые позволили бы мне вернуться в этом формате через Ajax? – JIbber4568

+0

Сцепление с соломинками ... вы пытались изменить свой список (из объекта) на список (из строки)? – markp3rry

ответ

0

Использование 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) 
0

То, что вы хотите, не является допустимым JSON («Date» вне кавычек - см спецификации на 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) + "]"