【发布时间】:2014-05-19 02:19:37
【问题描述】:
我研究过类似的其他问题,但我做的不对。我的 vb.net 类是错误的或什么的。我的班级应该只尝试代表候选人还是什么? 我需要帮助来反序列化这个 json:
{
"spatialReference" : {
"wkid" : 2286
},
"candidates" : [
{
"address" : "100 MAIN ST",
"location" : {
"x" : 1144782.9490543604,
"y" : 81361.525678694248
},
"score" : 100,
"attributes" : {
}
},
{
"address" : "100 E MAIN ST",
"location" : {
"x" : 1120908.3257195801,
"y" : 169917.71846333146
},
"score" : 77,
"attributes" : {
}
}
]
}
我正在使用以下代码进行反序列化:
Public Shared Function Deserialise(Of T)(ByVal json As String) As T
Dim obj As T = Activator.CreateInstance(Of T)()
Using ms As MemoryStream = New MemoryStream(Encoding.Unicode.GetBytes(json))
Dim serializer As DataContractJsonSerializer = New DataContractJsonSerializer(obj.GetType())
obj = serializer.ReadObject(ms)
Return obj
End Using
End Function
我的 vb.net 类看起来像这样:
<DataContract()> _
Public Class SearchResults
Private mCandidates() As candidate
<DataContract()> _
Public Class SpatialReference
Private mwkId As String
<DataMember()> _
Public Property wkid() As String
Get
Return mwkId
End Get
Set(ByVal value As String)
mwkId = value
End Set
End Property
End Class
<DataMember()> _
Public Property Candidates() As candidate()
Get
Return mCandidates
End Get
Set(ByVal value As candidate())
mCandidates = value
End Set
End Property
End Class
<DataContract()> _
Public Class candidate
Private mAddress As String
Private mLocation As Location
Private mScore As String
Private mAttr As String
<DataMember()> _
Public Property address() As String
Get
Return mAddress
End Get
Set(ByVal value As String)
mAddress = value
End Set
End Property
<DataMember()> _
Public Property location() As Location
Get
Return mLocation
End Get
Set(ByVal value As Location)
mLocation = value
End Set
End Property
<DataMember()> _
Public Property score() As String
Get
Return mScore
End Get
Set(ByVal value As String)
mScore = value
End Set
End Property
<DataMember()> _
Public Property attributes() As String
Get
Return mAttr
End Get
Set(ByVal value As String)
mAttr = value
End Set
End Property
End Class
【问题讨论】:
-
什么到底是行不通的?
-
嗨,马特,我没有在我构建的 .net 类中添加任何内容。没有错误,但也没有结果。
-
我可能会重新编写你的类来反序列化,但我会说这个。获取 Visual Studio 的此扩展 visualstudiogallery.msdn.microsoft.com/… 它允许您复制 JSON 输出并右键单击 - 粘贴为类;相信我花几个小时写这些课程的人,这行得通!
-
天啊,我不敢相信。它似乎仅适用于 VS 2012,并且仅在使用 C# 项目时才会粘贴,但它完全成功了。它为我创建了 JSon 类,我将它们粘贴到我的 vb 项目中(当然是 vb.net),它反序列化了它,我得到了我的结果。我认为我的课程是正确的,但数据类型不正确。非常感谢马特的小费。雅虎!
-
哈哈,没问题 - 这是 f0x 不是马特! ;) 马特编辑了你的帖子。