将JSON数据转换为VB.NET多维数组

时间:2012-02-27 12:02:14

标签: asp.net json type-conversion vb.net-2010

我有一个以这种格式转换为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。

有什么建议吗?

2 个答案:

答案 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首先提示将其转换为对象:)