我正在尝试使用 VB.NET 2.0 反序列化 JSON 字符串
I am trying to deserialize a JSON string using VB.NET 2.0
我正在尝试反序列化一个 JSON 字符串,但卡住了。
我的字符串是
[{"BasketItemID":3,"ProductEmbellishmentID":8,"EmbellishmentText":"lfo","Price":9.95},{"BasketItemID":3,"ProductEmbellishmentID":3,"EmbellishmentText":"rc","Price":9.95}]
我已将其保存在字符串 embels 中
我的 class 是
Public Class Embellishments
Private _BasketItemID As Integer
Private _ProductEmbellishmentID As Integer
Private _EmbellishmentText As Integer
Private _Price As Integer
Public Property BasketItemID() As Integer
Get
Return _BasketItemID
End Get
Set(value As Integer)
_BasketItemID = value
End Set
End Property
Public Property ProductEmbellishmentID() As String
Get
Return _ProductEmbellishmentID
End Get
Set(value As String)
_ProductEmbellishmentID = value
End Set
End Property
Public Property EmbellishmentText() As String
Get
Return _EmbellishmentText
End Get
Set(value As String)
_EmbellishmentText = value
End Set
End Property
Public Property Price() As Decimal
Get
Return _Price
End Get
Set(value As Decimal)
_Price = value
End Set
End Property
结束Class
我尝试使用
反序列化
Dim jss As New JavaScriptSerializer()
Dim emblist As List(Of Embellishments) = jss.Deserialize(Of Embellishments)(embels)
但是报错Value of type 'Embellishments' cannot be converted to 'System.Collections.Generic.List(Of Embellishments)'
我现在卡住了。谁能给我任何指示?
谢谢
EDIT
感谢@Plutonix,我现在已经尝试了
Dim errormessage As String=''
Dim Count As Integer = 0
Try
Dim jss As New JavaScriptSerializer()
Dim emblist As List(Of Embellishments) = jss.Deserialize(Of List(Of Embellishments))(embels)
For Each em As Embellishments In emblist
Count = Count + 1
Next
Catch ex As Exception
errormessage = ex.Message
End Try
但是我收到错误 'Exception has been thrown by the target of an invocation'
问题是这样的:
Dim emblist As List(Of Embellishments) = jss.Deserialize(Of Embellishments)(embels)
您告诉 Deserializer
它作用于 Embellishments
对象,但试图在 collection 对象中捕获结果。错误消息告诉您,如果您说字符串是单个对象,则它无法反序列化为它们的列表。换句话说,Embellishments
与 List(of Embellishments)
不是一回事。
由于字符串中是多个对象,正确的语法是(我叫我的Basket
):
Dim emblist = jss.Deserialize(Of List(Of Basket))(embels)
在VS2010及之后的版本中,您可以使用Option Infer来分配类型。这也是有效的,将创建一个篮子项目数组:
Dim emblist = jss.Deserialize(Of Basket())(embels)
更重要的是您应该启用 Option Strict。这导致废话:
Private _ProductEmbellishmentID As Integer
Public Property ProductEmbellishmentID() As String
支持字段类型与 属性 Getter/Setter 类型不匹配,将导致混乱。更改 Property
语句以匹配私有支持字段的类型。同样,在 VS2010 之后,您可以减少所有具有自动实现属性的样板代码:
Public Class Basket
Public Property BasketItemID As Integer
Public Property ProductEmbellishmentID As Integer
Public Property EmbellishmentText As String
Public Property Price As Decimal
End Class
我正在尝试反序列化一个 JSON 字符串,但卡住了。
我的字符串是
[{"BasketItemID":3,"ProductEmbellishmentID":8,"EmbellishmentText":"lfo","Price":9.95},{"BasketItemID":3,"ProductEmbellishmentID":3,"EmbellishmentText":"rc","Price":9.95}]
我已将其保存在字符串 embels 中
我的 class 是
Public Class Embellishments
Private _BasketItemID As Integer
Private _ProductEmbellishmentID As Integer
Private _EmbellishmentText As Integer
Private _Price As Integer
Public Property BasketItemID() As Integer
Get
Return _BasketItemID
End Get
Set(value As Integer)
_BasketItemID = value
End Set
End Property
Public Property ProductEmbellishmentID() As String
Get
Return _ProductEmbellishmentID
End Get
Set(value As String)
_ProductEmbellishmentID = value
End Set
End Property
Public Property EmbellishmentText() As String
Get
Return _EmbellishmentText
End Get
Set(value As String)
_EmbellishmentText = value
End Set
End Property
Public Property Price() As Decimal
Get
Return _Price
End Get
Set(value As Decimal)
_Price = value
End Set
End Property
结束Class
我尝试使用
反序列化 Dim jss As New JavaScriptSerializer()
Dim emblist As List(Of Embellishments) = jss.Deserialize(Of Embellishments)(embels)
但是报错Value of type 'Embellishments' cannot be converted to 'System.Collections.Generic.List(Of Embellishments)'
我现在卡住了。谁能给我任何指示? 谢谢
EDIT
感谢@Plutonix,我现在已经尝试了
Dim errormessage As String=''
Dim Count As Integer = 0
Try
Dim jss As New JavaScriptSerializer()
Dim emblist As List(Of Embellishments) = jss.Deserialize(Of List(Of Embellishments))(embels)
For Each em As Embellishments In emblist
Count = Count + 1
Next
Catch ex As Exception
errormessage = ex.Message
End Try
但是我收到错误 'Exception has been thrown by the target of an invocation'
问题是这样的:
Dim emblist As List(Of Embellishments) = jss.Deserialize(Of Embellishments)(embels)
您告诉 Deserializer
它作用于 Embellishments
对象,但试图在 collection 对象中捕获结果。错误消息告诉您,如果您说字符串是单个对象,则它无法反序列化为它们的列表。换句话说,Embellishments
与 List(of Embellishments)
不是一回事。
由于字符串中是多个对象,正确的语法是(我叫我的Basket
):
Dim emblist = jss.Deserialize(Of List(Of Basket))(embels)
在VS2010及之后的版本中,您可以使用Option Infer来分配类型。这也是有效的,将创建一个篮子项目数组:
Dim emblist = jss.Deserialize(Of Basket())(embels)
更重要的是您应该启用 Option Strict。这导致废话:
Private _ProductEmbellishmentID As Integer
Public Property ProductEmbellishmentID() As String
支持字段类型与 属性 Getter/Setter 类型不匹配,将导致混乱。更改 Property
语句以匹配私有支持字段的类型。同样,在 VS2010 之后,您可以减少所有具有自动实现属性的样板代码:
Public Class Basket
Public Property BasketItemID As Integer
Public Property ProductEmbellishmentID As Integer
Public Property EmbellishmentText As String
Public Property Price As Decimal
End Class