我对于使用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