我有一个接收JSON有效负载的WCF服务。
例如,像这样的有效载荷:
{ "a":"123", "b":"xyz" }
适用于以下服务方法签名:
<OperationContract()>
Public Sub SomeMethod(ByVal a As Integer, ByVal b As String)
a
和b
会自动分别投放到Integer
和String
。
但是,现在我需要向服务方法发送一个稍微复杂的参数,一个不是Integer
或String
:
{ "a":"123", "b":"xyz", "c":"[ { "key":"1", "val":"2" }, { "key":"2", "val":"3" } ]" }
基本上,c
是包含键值对(即JSON对象)的对象数组。那么,我在服务方法签名中声明c
是什么类型的?我对VB并不熟悉,所以我不知道有哪些类型可用。如果可能的话,还请提供一个示例,说明如何从您建议的任何类型中获取值。
答案 0 :(得分:1)
我为此使用System.Collections.ArrayList
,然后您可以使用For Each
进行迭代。
我不知道您使用什么来反序列化您的JSON,但我使用JavaScriptSerializer
,例如......
Imports System.Collections
Imports System.Collections.Generic
Imports System.Web.Script.Serialization
然后......
Dim sJSON as String = "{}" 'Contains the JSON in your question
Dim jsSerializer As JavaScriptSerializer = New JavaScriptSerializer()
Dim dictData As Dictionary(Of String, Object) = jsSerializer.Deserialize(Of Dictionary(Of String, Object))(sJSON)
If dictData.ContainsKey("c") Then
If TypeOf dictData("c") Is ArrayList Then
Dim arrData As ArrayList = DirectCast(dictData("c"), ArrayList)
For Each arrDataRecord In arrData
Next
End If
End If