在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
相关产品推荐
相关产品推荐

