Десериализация массива json в класс .net

У меня проблемы с десериализацией некоторых данных json, получением InvalidCastExceptions и т.п.

Может кто-то указать мне верное направление?

Вот json, который я хочу десериализовать;

[{"OrderId":0,"Name":"Сводка","MaxLen":"200"},{"OrderId":1,"Name":"Подробности","MaxLen":"0"}]

Вот мой код;

  Public Class jsTextArea
    Public OrderId As Integer
    Public Name As String
    Public MaxLen As String
  End Class

Dim js As New System.Web.Script.Serialization.JavaScriptSerializer
Dim rawdata = js.DeserializeObject(textAreaJson)
Dim lstTextAreas As List(Of jsTextArea) = CType(rawdata, List(Of jsTextArea))

person GordonB    schedule 16.02.2010    source источник


Ответы (3)


OrderId - это Int в вашем json (обратите внимание на отсутствие кавычек вокруг значений), но вы объявляете его как String в "jsTextArea". Кроме того, если тип, возвращаемый необработанными данными, не имеет приведения к List (Of jsTextArea), что, вероятно, не соответствует коду, который вы показали, не будет работать.

Обновить Чтобы вывести данные в список (из jsTextArea), попробуйте следующее:

    Dim js As New System.Web.Script.Serialization.JavaScriptSerializer
    Dim lstTextAreas = js.Deserialize(Of List(Of jsTextArea))(textAreaJson)
person Rob    schedule 16.02.2010
comment
@GordonB, смотрите обновление, которое я только что добавил. Код работает для меня :) Он также, кажется, обрабатывает преобразование int в строку между json и вашим классом :) - person Rob; 16.02.2010
comment
Ах, хорошо.... Только что обнаружил, что метод прямой десериализации работает... Пытался разбить его на несколько строк, чтобы увидеть, где происходит ошибка, но это не помогло :) Я дам вам ответ , так как вы, вероятно, опередили меня на несколько секунд..... Ура. - person GordonB; 16.02.2010

Выполнение всего этого в одной строке сработало на славу;

Dim lstTextAreas As List(Of jsTextArea) = js.Deserialize(textAreaJson, GetType(List(Of jsTextArea)))
person GordonB    schedule 16.02.2010
comment
Работая в основном на C# (таким образом, используя var для неявной типизации переменных), моя версия строки выглядит чище, но они, без сомнения, скомпилируются в один и тот же IL и сделают то же самое! :) - person Rob; 16.02.2010
comment
Да, два маршрута... тот же результат, хотя ваш менее многословен, чем мой. Спасибо за вашу помощь :) - person GordonB; 16.02.2010

Вот функция для десериализации JSON любого типа:

    Public Function DeserializeJson(Of T)(json As String) As T
        Return New JavaScriptSerializer().Deserialize(Of T)(json)
    End Function
person mikro    schedule 30.10.2016