Arrays 如何将JSON对象解析为KeyValuePair数组

Arrays 如何将JSON对象解析为KeyValuePair数组,arrays,json,vb.net,serialization,javascriptserializer,Arrays,Json,Vb.net,Serialization,Javascriptserializer,我试图解析: {"keys":[{"key":"IDVal7","value":"12345"},{"key":"IDVal6","value":"12345"},{"key":"IDVal5","value":"12345"},{"key":"IDVal4","value":"12345"},{"key":"IDVal3","value":"12345"},{"key":"IDVal2","value":"12345"},{"key":"IDVal1","value":"12345"},{"k

我试图解析:

{"keys":[{"key":"IDVal7","value":"12345"},{"key":"IDVal6","value":"12345"},{"key":"IDVal5","value":"12345"},{"key":"IDVal4","value":"12345"},{"key":"IDVal3","value":"12345"},{"key":"IDVal2","value":"12345"},{"key":"IDVal1","value":"12345"},{"key":"FilePathAndName","value":"c:\\my.xml"}]}
进入KeyValuePairs数组,但只能在解析到字典时将其序列化

这不起作用:

Dim keyVals As New Dictionary(Of String, KeyValuePair(Of String, String))
        Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer
        Try
            keyVals = serializer.Deserialize(Of Dictionary(Of String, KeyValuePair(Of String, String)))(Keys)           

        Catch ex As Exception

        End Try
但是,这将是一个keyvaluepairs数组,而不是ArrayList字典:

Dim keyVals As New Dictionary(Of String, Object)
        Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer
        Try
            keyVals = serializer.Deserialize(Of Dictionary(Of String, Object))(Keys)
        Catch ex As Exception

        End Try

有人知道怎么做吗?另外,我不能使用JSON.net。

您提供的JSON不能直接序列化为
KeyValuePair
s的列表/数组(错误本身就是明证)

但是,您可以使用“临时”类型,将提供的JSON反序列化为该对象,然后将其转换为KeyValuePair

例如,“临时”对象可以是这样的:

Class KeysDTO
    Class KeyValue
        Public Property Key As String
        Public Property Value As String
    End Class

    Public Property Keys As List(Of KeyValue)
End Class
您的反序列化将是:

Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer()
Dim dto As KeysDTO = serializer.Deserialize(Of KeysDTO)(keys)

' If you really want an array of KeyValuePairs, you can do this then
Dim keyValuePairs = dto.Keys.Select(Function(kv) New KeyValuePair(Of String, String)(kv.Key, kv.Value)).ToArray()

是的,这会起作用,只是我可以直接解析成一个KeyValuePair数组。无论如何,我决定只使用字典:
keyVals=serializer.Deserialize(字典(字符串,对象))对于keyVals(“键”)中的每个项(键),如果项(“键”)为“路径”,那么请求=XElement.Load(项(“值”))如果下一步
我的WCF也使用完全相同格式的json对象,并且操作契约中的参数是keyvaluepairs数组,则结束,所以我认为可能有一种简单的方法来模拟它。不可能直接解析成
KeyValuePair
,因为它没有无参数构造函数。您确实也可以执行上述操作:)。