Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deserializing json array into .net class

I'm having problems deserializing some json data, getting InvalidCastExceptions and the like.

Can anyone point me in the right direction?

Here's the json i'm wanting to deserialize;

[{"OrderId":0,"Name":"Summary","MaxLen":"200"},{"OrderId":1,"Name":"Details","MaxLen":"0"}]

Here's my code;

  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))
like image 970
GordonB Avatar asked Feb 16 '10 10:02

GordonB


People also ask

How JSON deserialization works in C#?

In Deserialization, it does the opposite of Serialization which means it converts JSON string to custom . Net object. In the following code, it calls the static method DeserializeObject() of the JsonConvert class by passing JSON data. It returns a custom object (BlogSites) from JSON data.

What is Deserializing a JSON?

Deserialization is the process of reversing a String from a previously serialized format. This coverts the serialized String into a format that allows its Data Structure properties to be accessible to manipulation.


2 Answers

OrderId is an Int in your json (note the lack fo quotes round the values), but you're declaring it as String in "jsTextArea". Also, unless the type that rawdata is returned as has a cast to List(Of jsTextArea), which it probably doesn't the code you've shown won't work.

Update To get the data out into a List(Of jsTextArea) try the following:

    Dim js As New System.Web.Script.Serialization.JavaScriptSerializer
    Dim lstTextAreas = js.Deserialize(Of List(Of jsTextArea))(textAreaJson)
like image 150
Rob Avatar answered Sep 23 '22 14:09

Rob


Doing it all on one line worked a treat;

Dim lstTextAreas As List(Of jsTextArea) = js.Deserialize(textAreaJson, GetType(List(Of jsTextArea)))
like image 41
GordonB Avatar answered Sep 23 '22 14:09

GordonB