2012-07-27 76 views
0

我想在.NET中使用JavascriptSerializer反序列化一些JSON。我正在使用的JSON的例子如下:Deserialise JSON数组到对象列表

[{ 
"dep_date": "2012-07-12", 
"tax": 141.53, 
"currency": "GBP", 
"vcr": "LX", 
"dst_apt": "PRG", 
"flight_in": [ 
    [ 
     { 
      "depApt": "PRG", 
      "dstApt": "FRA", 
      "depTime": "2012-07-15 19:05:00", 
      "vcr": "LH", 
      "carrier": "LH", 
      "arrTime": "2012-07-15 20:15:00", 
      "ocr": "LH", 
      "flightNo": "1401" 
     }, 
     { 
      "depApt": "FRA", 
      "dstApt": "LHR", 
      "depTime": "2012-07-15 21:30:00", 
      "vcr": "LH", 
      "carrier": "LH", 
      "arrTime": "2012-07-15 22:10:00", 
      "ocr": "LH", 
      "flightNo": "922" 
     } 
    ] 
], 
"price": 114.0, 
"dst_city": "PRG", 
"dep_apt": "LCY", 
"flight_out": [ 
    [ 
     { 
      "depApt": "LCY", 
      "dstApt": "ZRH", 
      "depTime": "2012-07-12 08:25:00", 
      "vcr": "LX", 
      "carrier": "LX", 
      "arrTime": "2012-07-12 11:15:00", 
      "ocr": "LX", 
      "flightNo": "451" 
     }, 
     { 
      "depApt": "ZRH", 
      "dstApt": "PRG", 
      "depTime": "2012-07-12 12:35:00", 
      "vcr": "LX", 
      "carrier": "LX", 
      "arrTime": "2012-07-12 13:55:00", 
      "ocr": "2L", 
      "flightNo": "1486" 
     } 
    ] 
], 
"ret_date": "2012-07-15", 
}] 

实际的代码/班我使用是:

<Serializable()> _ 
    Public Class FareResult 

     Public Property dep_date As String 
     Public Property tax As String 
     Public Property currency As String 
     Public Property vcr As String 
     Public Property dst_apt As String 
     Public Property flight_in As List(Of FlightResult) 
     Public Property price As String 
     Public Property dst_city As String 
     Public Property dep_apt As String 
     Public Property flight_out As List(Of FlightResult) 
     Public Property ret_date As String 

    End Class 

    <Serializable()> _ 
    Public Class FlightResult 

     Public Property depApt As String 
     Public Property dstApt As String 
     Public Property depTime As String 
     Public Property vcr As String 
     Public Property carrier As String 
     Public Property arrTime As String 
     Public Property ocr As String 
     Public Property flightNo As String 

    End Class 

Dim jss As New JavaScriptSerializer 
Dim oFareResults As Generic.List(Of FareResult) = jss.Deserialize(Of List(Of FareResult))(sJSON) 

然而,这只是给了我一个消息,说的类型FlightResults不支持数组的反序列化。我试过创建一个继承FlightResults列表的类,我试着将它设置为一个数组而不是列表,但它们都给出了相同的异常。

我在这里错过了什么吗?

回答

0

flight_inflight_out更改为数组作品(注意末尾为())。

Public Property flight_in As List(Of FlightResult)() 
Public Property flight_out As List(Of FlightResult)() 

你的JSON有一些解析错误(通过validator运行)。请注意在结尾处删除逗号。这是一个可用的固定副本。

[{ 
"dep_date": "2012-07-12", 
"tax": 141.53, 
"currency": "GBP", 
"vcr": "LX", 
"dst_apt": "PRG", 
"flight_in": [ 
    [ 
     { 
      "depApt": "PRG", 
      "dstApt": "FRA", 
      "depTime": "2012-07-15 19:05:00", 
      "vcr": "LH", 
      "carrier": "LH", 
      "arrTime": "2012-07-15 20:15:00", 
      "ocr": "LH", 
      "flightNo": "1401" 
     }, 
     { 
      "depApt": "FRA", 
      "dstApt": "LHR", 
      "depTime": "2012-07-15 21:30:00", 
      "vcr": "LH", 
      "carrier": "LH", 
      "arrTime": "2012-07-15 22:10:00", 
      "ocr": "LH", 
      "flightNo": "922" 
     } 
    ] 
], 
"price": 114.0, 
"dst_city": "PRG", 
"dep_apt": "LCY", 
"flight_out": [ 
    [ 
     { 
      "depApt": "LCY", 
      "dstApt": "ZRH", 
      "depTime": "2012-07-12 08:25:00", 
      "vcr": "LX", 
      "carrier": "LX", 
      "arrTime": "2012-07-12 11:15:00", 
      "ocr": "LX", 
      "flightNo": "451" 
     }, 
     { 
      "depApt": "ZRH", 
      "dstApt": "PRG", 
      "depTime": "2012-07-12 12:35:00", 
      "vcr": "LX", 
      "carrier": "LX", 
      "arrTime": "2012-07-12 13:55:00", 
      "ocr": "2L", 
      "flightNo": "1486" 
     } 
    ] 
], 
"ret_date": "2012-07-15" 
}] 
+0

不幸的是,这似乎没有做任何事情。我在一个名为SGEN的文件中得到了大约25个错误,“无法打开,它已被重命名,删除或移动”。不完全确定为什么。将其更改为flight_in()List(Of FlightResult)也不起作用。 – user1546281 2012-07-27 11:19:54

+1

@ user1546281您的JSON有一些解析错误。我用有效的JSON更新了答案。试试看。它*确实*解决了这个问题。 – ThinkingStiff 2012-07-27 17:16:47