我有一个以这种格式转换为JSON数据的多维数组。
"[[null,null,null,null,null,null],[null,null,null,1,1,null],[null,null,null,null,1,1],[null,null,null,null,null,null],[null,null,null,null,null,null]]"
我正在尝试使用JavascriptSerializer将这个字符串/整数的多维数组转换为等效形式
Dim retValue As List(Of String)
Dim deserializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
retValue deserializer.Deserialize(Of List(Of String))(o.value)
抛出异常:Type 'System.String' is not supported for deserialization of an array.
我尝试将其转换为Integers ,但发生了同样的例外。
如何使用.NET 3.5执行转换。
如果System.Web.Script.Serialization.JavaScriptSerializer可以完成这项任务,我不想使用JSON.NET DLL。
有什么建议吗?
答案 0 :(得分:2)
你试图将Json转换为一维字符串列表,而实际上它是一个Jagged字符串数组。使用Generics我不相信你可以巧妙地嵌套其他强类型对象(虽然我欢迎对此进行更正)并且你不能轻易地将它们转换(除非你有一个严格的结构,在这种情况下,带有DataContracts的POCO将是前进的方向)
我的方法是序列化为一个Object,其中字符串,整数和数组可以快乐地共存;他们只需要适当的拳击。我承认并不理想。我没有尝试过JavaScriptSerializer但是已经使用DataContractJsonSerialiser测试并确认了以下工作......
string json = "[[null,null,null,null,null,null],[null,null,null,1,1,null],[null,null,null,null,1,1],[null,null,null,null,null,null],[null,null,null,null,null,null]]";
object castObj = null;
DataContractJsonSerializer ser = new DataContractJsonSerializer( typeof( System.Object ));
// Create dummy stream to read into
using (MemoryStream ms = new MemoryStream( System.Text.Encoding.UTF8.GetBytes( json ) ) ){
castObj = ser.ReadObject(ms);
}
HTH
答案 1 :(得分:0)
我尝试了两种方法来实现解决方案: -
根据“SeanCocteau的评论: -
Dim o As Object = JSONField
Dim castObj() As Object = Nothing
Dim ser As New DataContractJsonSerializer(GetType(System.Object))
Using ms As New MemoryStream(System.Text.Encoding.UTF8.GetBytes(o.Value().ToString))
castObj = ser.ReadObject(ms)
End Using
Dim convObject As ArrayList = New ArrayList(castObj)
在这种格式中,我能够获取arrayList,然后通过迭代和适当的转换来获取每个内部arrayList
我试过的第二个解决方案: -
Dim o As Object = JSONField
Dim obj() As Object = (New JavaScriptSerializer()).Deserialize(Of Object)(o.Value.ToString())
Dim convObject As ArrayList = New ArrayList(obj)
在这种格式中,我能够获取arrayList,然后通过迭代和适当的转换来获取每个内部arrayList
感谢SeanCocteau首先提示将其转换为对象:)