反序列化JSON对象数组字符串为字符串数组遇错,如何解决?
解决JSON对象数组反序列化为字符串数组的问题
问题原因
你的响应字符串是JSON对象数组(数组元素是独立的JSON对象),但你试图直接反序列化为String()类型——JSON中的{}代表对象而非字符串,因此解析器会抛出格式不匹配的异常。
解决方案
先将整个响应解析为JSON数组结构,再遍历每个元素,将其重新序列化为JSON字符串,最终得到目标字符串数组。
代码示例
使用Newtonsoft.Json的JArray(来自Newtonsoft.Json.Linq命名空间)处理是最高效的方式:
Imports Newtonsoft.Json Imports Newtonsoft.Json.Linq ' 初始HTTP响应字符串 Dim response As String = "[{"test":"test"}, {"prova":"prova"}, {"test1":"test1"}, {"test2":"test2"}]" ' 1. 解析整个响应为JSON数组 Dim jsonArray As JArray = JArray.Parse(response) ' 2. 将每个JSON对象转换为字符串,生成目标数组 Dim payload As String() = jsonArray.Select(Function(token) token.ToString(Formatting.None)).ToArray()
说明
JArray.Parse:正确识别原始字符串的JSON数组结构,解析出每个内部的JSON对象。token.ToString(Formatting.None):将单个JSON对象序列化为紧凑格式的字符串;如果需要带缩进的格式化JSON,可替换为Formatting.Indented。
备选方案(不依赖JArray)
如果不想使用JArray,也可以先反序列化为对象列表,再逐个序列化回字符串:
Imports Newtonsoft.Json Dim response As String = "[{"test":"test"}, {"prova":"prova"}, {"test1":"test1"}, {"test2":"test2"}]" ' 先反序列化为对象列表 Dim objList As List(Of Object) = JsonConvert.DeserializeObject(Of List(Of Object))(response) ' 逐个序列化为字符串 Dim payload As String() = objList.Select(Function(obj) JsonConvert.SerializeObject(obj, Formatting.None)).ToArray()
内容的提问来源于stack exchange,提问作者Federico Galvagni
相关产品推荐
相关产品推荐

