【问题标题】:JSON.NET deserialising where no member name is available没有成员名称可用的 JSON.NET 反序列化
【发布时间】:2014-03-09 13:18:27
【问题描述】:

在 VB.NET 表单应用程序中使用 JSON.NET,我正在使用来自第 3 方的数据,下面是简化的 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

【问题讨论】:

  • ResponseStatus 类的定义在哪里?还是HttpResponse.Status 属性?
  • 刚刚添加到最后,我过度简化了我的例子!

标签: json vb.net serialization json.net


【解决方案1】:

要处理图像,您可以将以下内容添加到您的 VenueDirectoryResult 类中:

Public Images As Dictionary(Of String, String)

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

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

【讨论】:

  • 没问题;很高兴为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
  • 2017-11-21
相关资源
最近更新 更多