JSON.NET反序列化,没有可用的成员名称

时间:2014-02-11 16:17:14

标签: json vb.net serialization json.net

在VB.NET表单应用程序中使用JSON.NET,我正在使用来自第三方的数据,简化了下面的JSON

{
"Venue": {
    "ID": "ABDDF",
    "Name": "My Place",
    "Address": {
        "Address1": "London Road,",
        "Address2": "",
        "Town": "TEST TOWN",
        "County": "TEST",
        "Postcode": "PO1 1ST",
        "Country": "United Kingdom",
        "Region": "Europe"
    },
    "Directions": "Blah Blah Blah",
    "Images": {
        "/images/venueXXX/ABDDF/image1.jpg": "Image of Venue",
        "/images/venueXXX/ABDDF/image10.jpg": "Image of Venue",
        "/images/venueXXX/ABDDF/image2.jpg": "Image of Venue",
        "/images/venueXXX/ABDDF/image3.jpg": "Image of Venue",
        "/images/venueXXX/ABDDF/image4.jpg": "Image of Venue"
    },
    "Equipment": [
        {
            "ID": 8127,
            "VenueID": 1000,
            "EquipmentID": 12,
            "EquipmentName": "Secretarial",
            "MaxQuantity": 1,
            "ShowOnVenuePage": true
        },
        {
            "ID": 8128,
            "VenueID": 1000,
            "EquipmentID": 21,
            "EquipmentName": "Typing Services",
            "MaxQuantity": 1,
            "ShowOnVenuePage": true
        }
    ]
},
"ResponseStatus": {
    "ErrorCode": "200",
    "Message": "OK"
}
}

一切顺利,因为我创建了用JSON数据填充的类,如下所示。

我调用JSON.net的JsonConvert来填充类

Dim QueryResult = JsonConvert.DeserializeObject(Of Container)(responseFromServer)

但是我现在需要引用JSON中显示的图像,而设备可以在我的类中检索设备,我无法理解如何让JSON.Net访问图像,因为它们不在什么我打电话给命名对。

所以问题是,我的类声明应该允许JSON.net填充图像(或者我是否需要添加?)另外,对于我的参考,什么是图像存储的正确术语是什么在这个JSON?

Public Class VenueDirectoryResult
    Public Response As ResponseStatus
    Public ID As String
    Public Name As String
    Public Address As Address
    Public Directions As String
    Public Equipment As New List(Of Equipment)
End Class

Public Class Address
Public Property Address1() As String
    Get
        Return m_Address1
    End Get
    Set(value As String)
        m_Address1 = value
    End Set
End Property
Private m_Address1 As String
Public Property Address2() As String
    Get
        Return m_Address2
    End Get
    Set(value As String)
        m_Address2 = value
    End Set
End Property
Private m_Address2 As String
Public Property Town() As String
    Get
        Return m_Town
    End Get
    Set(value As String)
        m_Town = value
    End Set
End Property
Private m_Town As String
Public Property County() As String
    Get
        Return m_County
    End Get
    Set(value As String)
        m_County = value
    End Set
End Property
Private m_County As String
Public Property Postcode() As String
    Get
        Return m_Postcode
    End Get
    Set(value As String)
        m_Postcode = value
    End Set
End Property
Private m_Postcode As String
Public Property Country() As String
    Get
        Return m_Country
    End Get
    Set(value As String)
        m_Country = value
    End Set
End Property
Private m_Country As String
Public Property Region() As String
    Get
        Return m_Region
    End Get
    Set(value As String)
        m_Region = value
    End Set
End Property
Private m_Region As String
End Class

Public Class Equipment
Public Property ID() As Integer
    Get
        Return m_ID
    End Get
    Set(value As Integer)
        m_ID = value
    End Set
End Property
Private m_ID As Integer
Public Property VenueID() As Integer
    Get
        Return m_VenueID
    End Get
    Set(value As Integer)
        m_VenueID = value
    End Set
End Property
Private m_VenueID As Integer
Public Property EquipmentID() As Integer
    Get
        Return m_EquipmentID
    End Get
    Set(value As Integer)
        m_EquipmentID = value
    End Set
End Property
Private m_EquipmentID As Integer
Public Property EquipmentName() As String
    Get
        Return m_EquipmentName
    End Get
    Set(value As String)
        m_EquipmentName = value
    End Set
End Property
Private m_EquipmentName As String
Public Property MaxQuantity() As Integer
    Get
        Return m_MaxQuantity
    End Get
    Set(value As Integer)
        m_MaxQuantity = value
    End Set
End Property
Private m_MaxQuantity As Integer
Public Property ShowOnVenuePage() As Boolean
    Get
        Return m_ShowOnVenuePage
    End Get
    Set(value As Boolean)
        m_ShowOnVenuePage = value
    End Set
End Property
Private m_ShowOnVenuePage As Boolean
Public Property Price() As System.Nullable(Of Double)
    Get
        Return m_Price
    End Get
    Set(value As System.Nullable(Of Double))
        m_Price = value
    End Set
End Property
Private m_Price As System.Nullable(Of Double)
Public Property Vatable() As System.Nullable(Of Boolean)
    Get
        Return m_Vatable
    End Get
    Set(value As System.Nullable(Of Boolean))
        m_Vatable = value
    End Set
End Property
Private m_Vatable As System.Nullable(Of Boolean)
End Class

添加了响应类

Public Class ResponseStatus
Public Property ErrorCode() As String
    Get
        Return m_ErrorCode
    End Get
    Set(value As String)
        m_ErrorCode = value
    End Set
End Property
Private m_ErrorCode As String
Public Property Message() As String
    Get
        Return m_Message
    End Get
    Set(value As String)
        m_Message = value
    End Set
End Property
Private m_Message As String
End Class

这是容器类

Public Class Container
    Public Venue As VenueDirectoryResult
End Class

1 个答案:

答案 0 :(得分:3)

要处理图片,您可以将以下内容添加到VenueDirectoryResult课程中:

Public Images As Dictionary(Of String, String)

您可以通过检查字典中的Keys集合来获取图像列表。

就术语而言,图像存储在JSON对象中。此处使用对象的属性名称来保存图像URL。

相关问题