VB.NET中如何提取JSON字典嵌套层级的完整字符串列表?
解决JSON反序列化后字符串列表输出截断的问题
这个问题我碰到过好几次啦——其实不是你的数据被截断了,只是.NET里集合默认的ToString()方法为了避免输出太长,故意只显示开头部分而已,实际所有的列表元素都好好存在呢!给你几个靠谱的解决办法:
方法1:强转成具体集合类型后处理
因为你现在把levelTwo存成了Object类型,没法直接调用集合的全部方法,先把它强转成List(Of String)(根据你看到的内容,这应该是正确的类型),之后就能自由遍历或者拼接成完整字符串了:
' 先尝试将Object转成List(Of String),避免类型转换失败报错 Dim levelTwoList = TryCast(levelTwo, List(Of String)) If levelTwoList IsNot Nothing Then ' 方式1:逐个输出每个元素 Console.WriteLine("完整列表元素:") For Each item In levelTwoList Console.WriteLine(item) Next ' 方式2:用逗号拼接成一个完整字符串输出 Dim fullListStr = String.Join(", ", levelTwoList) Console.WriteLine("拼接后的完整字符串:" & fullListStr) End If
方法2:用强类型类代替Dictionary(更推荐)
用Dictionary(Of String, Object)虽然灵活,但容易出现类型转换的麻烦,不如直接定义和JSON结构匹配的实体类,反序列化时直接用强类型,代码更清晰也更安全:
' 定义和JSON结构对应的类 Public Class LevelOneModel Public Property level_two As List(Of String) End Class Public Class RootModel Public Property level_one As LevelOneModel End Class ' 反序列化时直接用RootModel Dim jsonResult = JsonConvert.DeserializeObject(Of RootModel)(responseFromServer) If jsonResult?.level_one?.level_two IsNot Nothing Then ' 直接获取完整列表,想怎么处理都行 Console.WriteLine(String.Join(" | ", jsonResult.level_one.level_two)) End If
额外说明
你在调试器里鼠标悬停能看到完整列表,是因为调试器会专门处理集合的显示逻辑,把所有元素都列出来;而ToString()是集合的默认方法,只做了简化输出,本质上数据没有丢失哦。
内容的提问来源于stack exchange,提问作者murphy1310
相关产品推荐
相关产品推荐

