我在字符串中获取json数据:
我收到错误无法将数组转换为classname
我的json和创建的类是Code what i have done
点击按钮,我试过了。我无法弄清楚如何做到这一点
Dim inputUrl As String
Dim output As String
TryExecute(Sub()
' Using client = New WebClient()
city = HttpUtility.UrlEncode(If(city, String.Empty))
state = HttpUtility.UrlEncode(If(state, String.Empty))
zipcode = HttpUtility.UrlEncode(If(zipcode, String.Empty))
street = HttpUtility.UrlEncode(If(street, String.Empty))
inputUrl = String.Format(Url, AuthId, AuthToken) + String.Format(QueryString, street, city, state, zipcode)
' myProducts(List < Product >= New JavaScriptSerializer().Deserialize < List < Project >> (objUSPSAPI.FormatJson(client.DownloadString(url__1))))
output = objUSPSAPI.FormatJson(wsClient.DownloadString(inputUrl))
Dim jss As New JavaScriptSerializer
Dim result = jss.Deserialize(Of components)(output)
答案 0 :(得分:0)
最后我做到了!
Json数据:
[
{
"input_index": 0,
"candidate_index": 0,
"delivery_line_1": "1600 Amphitheatre Pkwy",
"last_line": "Mountain View CA 94043-1351",
"delivery_point_barcode": "940431351000",
"components": {
"primary_number": "1600",
"street_name": "Amphitheatre",
"street_suffix": "Pkwy",
"city_name": "Mountain View",
"state_abbreviation": "CA",
"zipcode": "94043",
"plus4_code": "1351",
"delivery_point": "00",
"delivery_point_check_digit": "0"
},
"metadata": {
"record_type": "S",
"zip_type": "Standard",
"county_fips": "06085",
"county_name": "Santa Clara",
"carrier_route": "C909",
"congressional_district": "18",
"rdi": "Commercial",
"elot_sequence": "0089",
"elot_sort": "A",
"latitude": 37.42202,
"longitude": -122.08433,
"precision": "Zip9",
"time_zone": "Pacific",
"utc_offset": -8.0,
"dst": true
},
"analysis": {
"dpv_match_code": "Y",
"dpv_footnotes": "AABB",
"dpv_cmra": "N",
"dpv_vacant": "N",
"active": "Y",
"footnotes": "N#"
}
}
]
添加这些参考
1)添加这些参考文献
Imports System.ServiceModel.Web
Imports System.Runtime.Serialization
创建类以支持json数据
1)创建类以支持json
2)注意用于类<DataContract()>
和数据类型<DataMember()>
的属性
3)属性的名称应与json数据中的名称相同
<DataContract()> 'class attribute
Public Class JsonData
Private _input_index As String
<DataMember()> 'datatype attribute
Public Property input_index As String 'name of property same as Json
Get
Return _input_index
End Get
Set(ByVal value As String)
_input_index = value
End Set
End Property
Private _candidate_index As String
<DataMember()>
Public Property candidate_index As String
Get
Return _candidate_index
End Get
Set(ByVal value As String)
_candidate_index = value
End Set
End Property
Private _delivery_line_1 As String
<DataMember()>
Public Property delivery_line_1 As String
Get
Return _delivery_line_1
End Get
Set(ByVal value As String)
_delivery_line_1 = value
End Set
End Property
Private _last_line As String
<DataMember()>
Public Property last_line As String
Get
Return _last_line
End Get
Set(ByVal value As String)
_last_line = value
End Set
End Property
Private _delivery_point_barcode As String
<DataMember()>
Public Property delivery_point_barcode As String
Get
Return _delivery_point_barcode
End Get
Set(ByVal value As String)
_delivery_point_barcode = value
End Set
End Property
Private _Componentlist As components 'the class of this list is down
<DataMember()>
Public Property components As components ' note here: name is same same as in json
Get
Return _Componentlist
End Get
Set(ByVal value As components)
_Componentlist = value
End Set
End Property
Private _metadatalist As metadata 'the class of this list is down
<DataMember()>
Public Property metadata As metadata
Get
Return _metadatalist
End Get
Set(ByVal value As metadata)
_metadatalist = value
End Set
End Property
Private _anslysislist As analysis 'the class of this list is down
<DataMember()>
Public Property analysis As analysis
Get
Return _anslysislist
End Get
Set(ByVal value As analysis)
_anslysislist = value
End Set
End Property
End Class
<DataContract()>
Public Class components
Private _primarynumber As Integer
<DataMember()>
Public Property primary_number As String
Get
Return _primarynumber
End Get
Set(ByVal value As String)
_primarynumber = value
End Set
End Property
Private _streetname As String
<DataMember()>
Public Property street_name As String
Get
Return _streetname
End Get
Set(ByVal value As String)
_streetname = value
End Set
End Property
Private _streetsufix As String
<DataMember()>
Public Property street_suffix As String
Get
Return _streetsufix
End Get
Set(ByVal value As String)
_streetsufix = value
End Set
End Property
Private _city_name As String
<DataMember()>
Public Property city_name As String
Get
Return _city_name
End Get
Set(ByVal value As String)
_city_name = value
End Set
End Property
Private _state_abbreviation As String
<DataMember()>
Public Property state_abbreviation As String
Get
Return _state_abbreviation
End Get
Set(ByVal value As String)
_state_abbreviation = value
End Set
End Property
Private _zipcode As String
<DataMember()>
Public Property zipcode As String
Get
Return _zipcode
End Get
Set(ByVal value As String)
_zipcode = value
End Set
End Property
Private _plus4_code As Integer
<DataMember()>
Public Property plus4_code As String
Get
Return _plus4_code
End Get
Set(ByVal value As String)
_plus4_code = value
End Set
End Property
Private _delivery_point As Integer
<DataMember()>
Public Property delivery_point As String
Get
Return _delivery_point
End Get
Set(ByVal value As String)
_delivery_point = value
End Set
End Property
Private _delivery_point_check_digit As Integer
<DataMember()>
Public Property delivery_point_check_digit As String
Get
Return _delivery_point_check_digit
End Get
Set(ByVal value As String)
_delivery_point_check_digit = value
End Set
End Property
End Class
<DataContract()>
Public Class metadata
Private _record_type As String
<DataMember()>
Public Property record_type As String
Get
Return _record_type
End Get
Set(ByVal value As String)
_record_type = value
End Set
End Property
Private _zip_type As String
<DataMember()>
Public Property zip_type As String
Get
Return _zip_type
End Get
Set(ByVal value As String)
_zip_type = value
End Set
End Property
Private _county_fips As String
<DataMember()>
Public Property county_fips As String
Get
Return _county_fips
End Get
Set(ByVal value As String)
_county_fips = value
End Set
End Property
Private _county_name As String
<DataMember()>
Public Property county_name As String
Get
Return _county_name
End Get
Set(ByVal value As String)
_county_name = value
End Set
End Property
Private _carrier_route As String
<DataMember()>
Public Property carrier_route As String
Get
Return _carrier_route
End Get
Set(ByVal value As String)
_carrier_route = value
End Set
End Property
Private _congressional_district As String
<DataMember()>
Public Property congressional_district As String
Get
Return _congressional_district
End Get
Set(ByVal value As String)
_congressional_district = value
End Set
End Property
Private _rdi As String
<DataMember()>
Public Property rdi As String
Get
Return _rdi
End Get
Set(ByVal value As String)
_rdi = value
End Set
End Property
Private _elot_sequence As String
<DataMember()>
Public Property elot_sequence As String
Get
Return _elot_sequence
End Get
Set(ByVal value As String)
_elot_sequence = value
End Set
End Property
Private _elot_sort As String
<DataMember()>
Public Property elot_sort As String
Get
Return _elot_sort
End Get
Set(ByVal value As String)
_elot_sort = value
End Set
End Property
Private _latitude As String
<DataMember()>
Public Property latitude As String
Get
Return _latitude
End Get
Set(ByVal value As String)
_latitude = value
End Set
End Property
Private _longitude As String
<DataMember()>
Public Property longitude As String
Get
Return _longitude
End Get
Set(ByVal value As String)
_longitude = value
End Set
End Property
Private _precision As String
<DataMember()>
Public Property precision As String
Get
Return _precision
End Get
Set(ByVal value As String)
_precision = value
End Set
End Property
Private _time_zone As String
<DataMember()>
Public Property time_zone As String
Get
Return _time_zone
End Get
Set(ByVal value As String)
_time_zone = value
End Set
End Property
Private _utc_offset As String
<DataMember()>
Public Property utc_offset As String
Get
Return _utc_offset
End Get
Set(ByVal value As String)
_utc_offset = value
End Set
End Property
Private _dst As String
<DataMember()>
Public Property dst As String
Get
Return _dst
End Get
Set(ByVal value As String)
_dst = value
End Set
End Property
End Class
<DataContract()>
Public Class analysis
Private _dpv_match_code As String
<DataMember()>
Public Property dpv_match_code As String
Get
Return _dpv_match_code
End Get
Set(ByVal value As String)
_dpv_match_code = value
End Set
End Property
Private _dpv_footnotes As String
<DataMember()>
Public Property dpv_footnotes As String
Get
Return _dpv_footnotes
End Get
Set(ByVal value As String)
_dpv_footnotes = value
End Set
End Property
Private _dpv_cmra As String
<DataMember()>
Public Property dpv_cmra As String
Get
Return _dpv_cmra
End Get
Set(ByVal value As String)
_dpv_cmra = value
End Set
End Property
Private _dpv_vacant As String
<DataMember()>
Public Property dpv_vacant As String
Get
Return _dpv_vacant
End Get
Set(ByVal value As String)
_dpv_vacant = value
End Set
End Property
Private _active As String
<DataMember()>
Public Property active As String
Get
Return _active
End Get
Set(ByVal value As String)
_active = value
End Set
End Property
Private _footnotes As String
<DataMember()>
Public Property footnotes As String
Get
Return _footnotes
End Get
Set(ByVal value As String)
_footnotes = value
End Set
End Property
从json字符串中获取值:
Dim output As String
output = objUSPSAPI.FormatJson(wsClient.DownloadString(inputUrl)) ' download json string from external source
Dim JsonDataobj = New List(Of JsonData)
Dim ser = New DataContractJsonSerializer(GetType(List(Of JsonData)))
Dim stream = New MemoryStream(Encoding.UTF8.GetBytes(output))
JsonDataobj = TryCast(ser.ReadObject(stream), List(Of JsonData))
If JsonDataobj IsNot Nothing AndAlso JsonDataobj.Count > 0 Then
Dim Uspsdata As New DataTable
Uspsdata.Columns.Add("primary_number", GetType(System.String))
Uspsdata.Columns.Add("street_name", GetType(System.String))
Uspsdata.Columns.Add("street_suffix", GetType(System.String))
Uspsdata.Columns.Add("city_name", GetType(System.String))
Uspsdata.Columns.Add("state_abbreviation", GetType(System.String))
Uspsdata.Columns.Add("zipcode", GetType(System.String))
Uspsdata.Columns.Add("plus4_code", GetType(System.String))
Uspsdata.Columns.Add("delivery_point", GetType(System.String))
Uspsdata.Columns.Add("delivery_point_check_digit", GetType(System.String))
Dim dr As DataRow
For Each objaddress As JsonData In JsonDataobj
If Not objaddress.components Is Nothing Then
dr = Uspsdata.NewRow
dr("primary_number") = objaddress.components.primary_number.ToString()
dr("street_name") = objaddress.components.street_name.ToString()
dr("street_suffix") = objaddress.components.street_suffix.ToString()
dr("city_name") = objaddress.components.city_name.ToString()
dr("state_abbreviation") = objaddress.components.state_abbreviation.ToString()
dr("zipcode") = objaddress.components.zipcode.ToString()
dr("plus4_code") = objaddress.components.plus4_code.ToString()
dr("delivery_point") = objaddress.components.delivery_point.ToString()
dr("delivery_point_check_digit") = objaddress.components.delivery_point_check_digit.ToString()
Uspsdata.Rows.Add(dr)
End If
Next