Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 将JSON数据转换为VB.NET多维数组_Asp.net_Json_Type Conversion_Vb.net 2010 - Fatal编程技术网

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

Asp.net 将JSON数据转换为VB.NET多维数组,asp.net,json,type-conversion,vb.net-2010,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(

我有一个多维数组,转换成这种格式的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'不支持反序列化数组。

我试着把它转换成整数 ,但发生了相同的异常

如何使用.NET 3.5执行转换

如果System.Web.Script.Serialization.JavaScriptSerializer可以完成这项工作,我不想使用JSON.NET dll


有什么建议吗?

您试图将Json转换为一维字符串列表,而实际上它是一个锯齿状字符串数组。对于泛型,我不相信您可以巧妙地嵌套其他强类型对象(尽管我欢迎对此进行更正),并且您无法轻松地将它们转换为其他类型(除非您有一个刚性结构,在这种情况下,使用DataContracts的POCO将是前进的方向)

我的方法是序列化成一个对象,在这个对象中字符串、整数和数组可以愉快地共存;他们只是需要适当的拳击比赛。我承认这并不理想。我没有尝试过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

我尝试了两种方法来实现解决方案:-

根据“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提供了先将其转换为对象的提示:)

[null,null,null,1,1,null]->1不是字符串,应该是[null,null,null,“1”,“1”,null]@Myra ok,但我也尝试了整数转换,但结果是一样的,异常消息只是改为整数不受支持。谢谢你考虑过DataContractJsonSerialiser()?我也会尝试对对象应用DataContract(而不是字符串列表)为了来回序列化…@SeanCocteau你的意思是,我应该创建数据协定类并转换为该类对象来执行此操作?这将是大量不必要的工作,对吗?我只想要我的二维数组[根据转换的格式,我想它是锯齿数组]对于等效的VB.NETSorry,我假设您处理的是特定对象,因此是数据契约。Anyhoo-下面提供的答案…谢谢它的帮助。然后我将对象转换为ArrayList,然后使用索引从ArrayList内部获取每个ArrayList。我正在寻找一个清晰的对象。关键是我知道我要获取的对象的类型回到server.Tbh-如果您知道要返回的对象的类型,为什么不使用DTO(数据传输对象)对其进行序列化和反序列化?这肯定会为您省去装箱的麻烦…它们实际上是整数。[在列中包含0/1的矩阵表示].我希望直接反序列化并使用反序列化键入cast。但后来我遵循了您的suggestions@JoeCoderGuyJSONField包含一个json样式的对象[[a,b,c,d,e,f],[g,h,i,j,k,l]]