Проблема возникла в этой строке:
Context.Response.Write(serializer.Serialize(dt))
Вы пытаетесь сериализовать экземпляр DataTable
непосредственно в экземпляр JavaScriptSerializer
, который принимает объекты коллекции, такие как IEnumerable
или Dictionary(Of TKey, TValue)
.Обычно вам нужно использовать методы AsEnumerable()
и [Select]()
LINQ для преобразования в IEnumerable
:
Dim list = dt.AsEnumerable().[Select](Function(row) New With { Key
.id = row("COMPLAINTID"), Key
.name = row("COMPLAINTNAME"),
' other DataTable columns here
}).ToList()
Context.Response.Write(serializer.Serialize(list))
Но поскольку у вас есть список Dictionary(Of String, Object)
, содержащий объекты для сериализации, просто передайтесловарь в сериализатор вместо передачи DataTable
:
Dim rows As New List(Of Dictionary(Of String, Object))()
Dim row As Dictionary(Of String, Object)
For Each dr As DataRow In dt.Rows
row = New Dictionary(Of String, Object)()
rows.Add(row)
Next
' pass the list of dictionary here
Context.Response.Write(serializer.Serialize(rows))
Примечание:
Вы можете попробовать JsonConvert.SerializeObject () методиз JSON.NET для сериализации списка, содержащего Dictionary(Of TKey, TValue)
объектов, который имеет лучшую способность обрабатывать словарь, чем метод JavaScriptSerializer.Serialize()
.Обратите внимание, что вы должны проверить вывод, чтобы убедиться, что строка JSON правильно отформатирована.