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

在VB.NET(.NET4.8)中用Json.NET反序列化嵌套数组API响应

解决方案

1. 修正类结构与字段映射

首先调整你的类定义,去掉多余的ChoiceLists内部类,直接在SurveyChoices中定义对应API结构的属性;同时处理API返回中不同大小写/名称的文本字段:

Imports Newtonsoft.Json

Public Class SurveyChoices
    ' 对应API的choiceLists二维数组,定义为嵌套列表
    <JsonProperty("choiceLists")>
    Public Property ChoiceLists As List(Of List(Of Choice))
End Class

Public Class Choice
    <JsonProperty("value")>
    Public Property Value As String

    ' 分别映射API中不同的文本字段
    <JsonProperty("text", NullValueHandling := NullValueHandling.Ignore)>
    Private Property TextLower As String

    <JsonProperty("TEXT", NullValueHandling := NullValueHandling.Ignore)>
    Private Property TextUpper As String

    <JsonProperty("position", NullValueHandling := NullValueHandling.Ignore)>
    Private Property PositionText As String

    ' 统一对外提供文本值,按优先级取值
    Public ReadOnly Property Text As String
        Get
            Return TextLower ?? TextUpper ?? PositionText ?? String.Empty
        End Get
    End Property
End Class

2. 正确反序列化

使用调整后的类型进行反序列化:

Dim responseText As String = str.ReadToEnd()
Dim surveyChoices As SurveyChoices = JsonConvert.DeserializeObject(Of SurveyChoices)(responseText)

3. 提取数据到DataTable

遍历反序列化后的嵌套列表,将value和text写入DataTable:

Dim dt As New DataTable()
dt.Columns.Add("Value", GetType(String))
dt.Columns.Add("Text", GetType(String))

For Each choiceGroup In surveyChoices.ChoiceLists
    For Each item In choiceGroup
        dt.Rows.Add(item.Value, item.Text)
    Next
Next

' 绑定到Repeater
yourRepeater.DataSource = dt
yourRepeater.DataBind()

关键说明

  • API返回的choiceLists是二维数组(数组的数组),因此属性类型必须定义为List(Of List(Of Choice))才能正确匹配结构,之前的内部类结构会导致Json.NET无法识别对应关系。
  • API中文本字段存在text、TEXT、position三种不同键名,通过多个私有属性+统一只读属性的方式,兼容所有字段取值场景,确保能提取到需要的文本内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:44:58