Deserialise JSON数组到对象列表
问题描述:
我想在.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列表的类,我试着将它设置为一个数组而不是列表,但它们都给出了相同的异常。
我在这里错过了什么吗?
答
将flight_in
和flight_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"
}]
不幸的是,这似乎没有做任何事情。我在一个名为SGEN的文件中得到了大约25个错误,“无法打开,它已被重命名,删除或移动”。不完全确定为什么。将其更改为flight_in()List(Of FlightResult)也不起作用。 – user1546281 2012-07-27 11:19:54
@ user1546281您的JSON有一些解析错误。我用有效的JSON更新了答案。试试看。它*确实*解决了这个问题。 – ThinkingStiff 2012-07-27 17:16:47