Pergunta

I'm receiving JSON via HTTP request. I'm writing the JSON array into a string

getResult = ReadHttpContent.ReadToEnd()

I then use the following code to read the data.

 Dim ser As New System.Web.Script.Serialization.JavaScriptSerializer
 Dim results As JSON_PostionList = DirectCast(ser.Deserialize(Of JSON_PostionList)(getResult.ToString), JSON_PostionList)

The problem is results is nothing.

Friend Class JSON_PostionList
    Friend positionList() As JSON_Position
End Class

Friend Class JSON_Position
    Friend deviceID As String
    Friend coordinate() As JSON_Coordinates
    Friend speed As String
    Friend ignitionState As String
    Friend dateTime() As JSON_dateTime
End Class

Friend Class JSON_Coordinates
    Friend Latitude As Decimal
    Friend Longitude As Decimal
End Class

Friend Class JSON_dateTime
    Friend Year As Integer
    Friend Month As Integer
    Friend Day As Integer
    Friend Hour As Integer
    Friend Minute As Integer
    Friend Seconds As Integer
    Friend Timezone As String
End Class

I've looked at other examples and I can't see what I'm doing wrong.

The JSON is below

{"positionList":[{"deviceId":"27","coordinate":{"latitude":51.918739318848,"longitude":19.720266342163},"speed":0,"ignitionState":"OFF","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":31,"seconds":6,"timezone":"UTC"}},{"deviceId":"33","coordinate":{"latitude":52.355289459229,"longitude":21.748106002808},"speed":0,"ignitionState":"OFF","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":33,"seconds":39,"timezone":"UTC"}},{"deviceId":"70","coordinate":{"latitude":51.918880462646,"longitude":19.720336914062},"speed":0,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":34,"seconds":25,"timezone":"UTC"}},{"deviceId":"30","coordinate":{"latitude":51.658668518066,"longitude":15.133635520935},"speed":0,"ignitionState":"OFF","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":35,"seconds":4,"timezone":"UTC"}},{"deviceId":"2","coordinate":{"latitude":51.158256530762,"longitude":16.171270370483},"speed":0,"ignitionState":"OFF","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":36,"seconds":57,"timezone":"UTC"}},{"deviceId":"18","coordinate":{"latitude":50.036727905273,"longitude":20.028551101685},"speed":0,"ignitionState":"OFF","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":40,"seconds":14,"timezone":"UTC"}},{"deviceId":"26","coordinate":{"latitude":51.475696563721,"longitude":3.6968178749084},"speed":0,"ignitionState":"OFF","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":40,"seconds":51,"timezone":"UTC"}},{"deviceId":"85","coordinate":{"latitude":51.918560028076,"longitude":19.720746994019},"speed":0,"ignitionState":"OFF","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":41,"seconds":43,"timezone":"UTC"}},{"deviceId":"29","coordinate":{"latitude":52.045883178711,"longitude":4.4028444290161},"speed":0,"ignitionState":"OFF","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":42,"seconds":28,"timezone":"UTC"}},{"deviceId":"16","coordinate":{"latitude":52.355323791504,"longitude":21.748266220093},"speed":0,"ignitionState":"OFF","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":45,"seconds":6,"timezone":"UTC"}},{"deviceId":"34","coordinate":{"latitude":49.350063323975,"longitude":11.100284576416},"speed":13,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":45,"seconds":23,"timezone":"UTC"}},{"deviceId":"4","coordinate":{"latitude":51.919269561768,"longitude":19.719999313354},"speed":0,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":46,"seconds":21,"timezone":"UTC"}},{"deviceId":"5","coordinate":{"latitude":51.919944763184,"longitude":19.719484329224},"speed":19,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":46,"seconds":23,"timezone":"UTC"}},{"deviceId":"9","coordinate":{"latitude":51.918914794922,"longitude":19.72047996521},"speed":0,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":46,"seconds":39,"timezone":"UTC"}},{"deviceId":"15","coordinate":{"latitude":44.425228118896,"longitude":11.273155212402},"speed":87,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":46,"seconds":53,"timezone":"UTC"}},{"deviceId":"7","coordinate":{"latitude":51.300552368164,"longitude":17.767946243286},"speed":89,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":46,"seconds":59,"timezone":"UTC"}},{"deviceId":"108","coordinate":{"latitude":44.245601654053,"longitude":12.217920303345},"speed":77,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":47,"seconds":8,"timezone":"UTC"}},{"deviceId":"13","coordinate":{"latitude":46.994400024414,"longitude":15.404622077942},"speed":90,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":47,"seconds":13,"timezone":"UTC"}},{"deviceId":"1","coordinate":{"latitude":50.578773498535,"longitude":19.154914855957},"speed":0,"ignitionState":"OFF","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":47,"seconds":17,"timezone":"UTC"}},{"deviceId":"49","coordinate":{"latitude":44.562206268311,"longitude":10.994169235229},"speed":70,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":47,"seconds":17,"timezone":"UTC"}},{"deviceId":"3","coordinate":{"latitude":42.846416473389,"longitude":2.9264533519745},"speed":90,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":47,"seconds":18,"timezone":"UTC"}},{"deviceId":"8","coordinate":{"latitude":51.918273925781,"longitude":19.720729827881},"speed":0,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":47,"seconds":20,"timezone":"UTC"}},{"deviceId":"31","coordinate":{"latitude":52.873352050781,"longitude":20.290950775146},"speed":79,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":47,"seconds":21,"timezone":"UTC"}},{"deviceId":"32","coordinate":{"latitude":43.801475524902,"longitude":4.3138313293457},"speed":89,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":47,"seconds":23,"timezone":"UTC"}},{"deviceId":"17","coordinate":{"latitude":52.079643249512,"longitude":20.694221496582},"speed":68,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":47,"seconds":27,"timezone":"UTC"}},{"deviceId":"6","coordinate":{"latitude":43.706363677979,"longitude":13.204977989197},"speed":87,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":47,"seconds":32,"timezone":"UTC"}},{"deviceId":"25","coordinate":{"latitude":51.129333496094,"longitude":1.3405156135559},"speed":11,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":47,"seconds":33,"timezone":"UTC"}},{"deviceId":"37","coordinate":{"latitude":52.040710449219,"longitude":20.036195755005},"speed":93,"ignitionState":"ON","dateTime":{"year":2014,"month":2,"day":28,"hour":15,"minute":47,"seconds":36,"timezone":"UTC"}}]}

Foi útil?

Solução

You have two issues with your classes.

  1. The properties of your classes are all declared with Friend access, so the serializer cannot see them. That is why positionList is Nothing. The properties need to be made Public. It is OK if the classes themselves have Friend access, however.
  2. In your JSON_Position class you have declared both the coordinate and dateTime properties as arrays, but in the JSON they are not arrays. This mismatch will cause an error during deserialization. Declare these properties to hold single instances.

Here are the corrected classes:

Friend Class JSON_PostionList
    Public positionList() As JSON_Position
End Class

Friend Class JSON_Position
    Public deviceId As String
    Public coordinate As JSON_Coordinates
    Public speed As String
    Public ignitionState As String
    Public dateTime As JSON_dateTime
End Class

Friend Class JSON_Coordinates
    Public Latitude As Decimal
    Public Longitude As Decimal
End Class

Friend Class JSON_dateTime
    Public Year As Integer
    Public Month As Integer
    Public Day As Integer
    Public Hour As Integer
    Public Minute As Integer
    Public Seconds As Integer
    Public Timezone As String
End Class
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top