You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VB.NET中创建类序列化Recreation.gov营地JSON数据

问题分析与解决方案

首先明确:你拿到的JSON格式是有效的,只是存在一个小笔误("2023-08-0T00:00:00Z"日期少了一位数字,应该是"2023-08-01T00:00:00Z"这类合法格式),但整体结构符合JSON规范。

你遇到的序列化问题,根源是自动生成工具(jsonutils)无法识别JSON里的动态键结构:

  • campsites下的"1"、"2"是营地ID,属于动态键,本质是键值对集合,不是固定属性
  • availabilities和quantities下的日期字符串也是动态键,同样是键值对集合

自动工具把这些动态键转换成了固定类属性,自然无法适配不同营地、不同日期的返回数据,导致序列化失败。

正确的VB类结构定义

把动态键对应的部分改成Dictionary类型,就能完美适配这种结构:

Imports System.Collections.Generic

Public Class CampsiteResponse
    Public Property campsites As Dictionary(Of String, Campsite)
    Public Property count As Integer
End Class

Public Class Campsite
    Public Property availabilities As Dictionary(Of String, String)
    Public Property campsite_id As String
    Public Property campsite_reserve_type As String
    Public Property campsite_rules As Object
    Public Property campsite_type As String
    Public Property capacity_rating As String
    Public Property loop As String
    Public Property max_num_people As Integer
    Public Property min_num_people As Integer
    Public Property quantities As Dictionary(Of String, Integer)
    Public Property site As String
    Public Property supplemental_camping As Object
    Public Property type_of_use As String
End Class

序列化/反序列化示例(以Newtonsoft.Json为例)

如果使用Newtonsoft.Json库,直接用下面的代码就能完成反序列化:

Dim jsonString As String = ' 你的API返回JSON字符串
Dim response = Newtonsoft.Json.JsonConvert.DeserializeObject(Of CampsiteResponse)(jsonString)

' 遍历所有营地
For Each kvp In response.campsites
    Dim campsiteId = kvp.Key
    Dim campsite = kvp.Value
    Console.WriteLine($"营地ID: {campsiteId},站点编号: {campsite.site}")
    
    ' 遍历该营地的可用性
    For Each availabilityKvp In campsite.availabilities
        Dim dateStr = availabilityKvp.Key
        Dim status = availabilityKvp.Value
        Console.WriteLine($"日期: {dateStr},状态: {status}")
    Next
Next

如果用System.Text.Json,需要确保配置支持字典的序列化:

Dim options = New System.Text.Json.JsonSerializerOptions With {
    .PropertyNameCaseInsensitive = True ' 忽略大小写匹配属性
}
Dim response = System.Text.Json.JsonSerializer.Deserialize(Of CampsiteResponse)(jsonString, options)

内容的提问来源于stack exchange,提问作者Jeremiah Haney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:09:56