我對於使用JSON.net並且遇到了一些json有問題,我得到的是有時以數組形式出現並且有時作爲單個對象出現的JSON。下面是我用JSON它有如何反序列化可以是數組或單個對象的JSON
一種方式看到的一個例子...
{
"Make": "Dodge",
"Model": "Charger",
"Lines": [
{
"line": "base",
"engine": "v6",
"color": "red"
},
{
"line": "R/T",
"engine": "v8",
"color": "black"
}
],
"Year": "2013"
}
另一種方式是可以派上
{
"Make": "Dodge",
"Model": "Charger",
"Lines": {
"line": "base",
"engine": "v6",
"color": "red"
},
"Year": "2013"
}
這裏是我一直用於第一種方式工作的代碼,並在第二種情況下引發異常。一直在淘金的方式來實現這一點,我真的卡住了。
Public Class jsonCar
Public Property make As String
Public Property model As String
Public Property lines As List(Of jsonCarLines)
Public Property year As String
End Class
Public Class jsonCarLines
Public Property line As String
Public Property engine As String
Public Property color As String
End Class
Module Module1
Private Const json As String = "{""Make"":""Dodge"",""Model"":""Charger"",""Lines"": [{""line"":""base"",""engine"": ""v6"",""color"":""red""},{""line"":""R/T"",""engine"":""v8"",""color"":""black""}],""Year"":""2013""}"
'Private Const json As String = "{""Make"":""Dodge"",""Model"":""Charger"",""Lines"": {""line"":""R/T"",""engine"":""v8"",""color"":""black""},""Year"":""2013""}"
Sub Main()
Dim car As jsonCar = JsonConvert.DeserializeObject(Of jsonCar)(json)
Console.WriteLine("Make: " & car.make)
Console.WriteLine("Model: " & car.model)
Console.WriteLine("Year: " & car.year)
Console.WriteLine("Lines: ")
For Each ln As jsonCarLines In car.lines
Console.WriteLine(" Name: " & ln.line)
Console.WriteLine(" Engine: " & ln.engine)
Console.WriteLine(" Color: " & ln.color)
Console.WriteLine()
Next
Console.ReadLine()
End Sub
End Module
我猜這可能需要一個自定義的JsonConverter,但我對如何設置它有點不知所措。
我不認爲單一的對象可以被寫入JSON作爲一個對象的數組?這將大大簡化事情。事實上,如果允許「行」爲一個或多個,這可能是正確的方法。否則,你將不得不編寫一個自定義分析器,或者添加必要的'[]'字符的預處理器。爲什麼允許這種設計? – 2015-02-08 15:30:01
可能的重複[如何使用JSON.net處理同一個屬性的單個項目和數組](http://stackoverflow.com/questions/18994685/how-to-handle-both-a-single-item -and-an-array-for-the-the-the-property-using-json-n) – 2015-02-08 18:07:56
不幸的是,我沒有控制json字符串進來。所以做了字符串操作之後,我被我所得到的東西卡住了。我查看了Brian所引用的問題,並且遇到了問題使其能夠正常工作。我認爲這裏的解決方案感覺更直接,並且在本地VB中,這對我來說是個好處:) – krazifan 2015-02-08 20:56:06