【问题标题】:How to pass a complex JSON object through VB.net to call Rest API如何通过 VB.net 传递复杂的 JSON 对象来调用 Rest API
【发布时间】:2019-01-25 23:20:15
【问题描述】:

我有一个 Rest API,我必须从我的 vb.net 代码中调用它。 在 Postman 中,我将 Body 中的参数传递如下:

{
    "Search" : 
    {
        "EmpName" : "Rachel",
        "EmpID" : "1100320"

    },
    "IncludeAttributes" : ["EmpId", "EmpName","Department","Salary","ManagerId"]
}

我的问题是我不确定如何通过来自 VB.Net 调用的调用传递这种参数。 这是我尝试过的:

Dim searchParameters = New Dictionary(Of String, String)()
        searchParameters.Add("EmpName", "Rachel")
        searchParameters.Add("EmpID", "1100320")
        Dim jsonSearchParameters = 
                        JsonConvert.SerializeObject(searchParameters)
        Dim stringContent = New StringContent(jsonSearchParameters, Encoding.UTF8, "application/json")

现在我对如何在同一个对象中传递 IncludeAttributes 部分一无所知。 有什么帮助吗?

【问题讨论】:

  • 提示 - 尝试使用 New Dictionary(Of String, New Dictionary(Of String, String))() 获取 Search
  • 我明白 - 但如果你看到它是一种异构数据。 Search 可以是 Dictionary of Dictionary,但 Include Attributes 是什么?为了解释我的意思是伪代码,它肯定不起作用: Dim SearchAttributes As New Dictionary(Of String, Dictionary(Of String, String)) SearchAttributes.Add("Search", searchParameters) SearchAttributes.Add("IncludeAttributes ","[""DiskSetId"",""Repository"",""ClaimNumber"",""Id"",""Category""]"")
  • Dictionary(Of String, Object) 呢?

标签: json rest api


【解决方案1】:

正如@cricket_007 建议的那样,一个 Dictionary(Of String, Object) 可以工作:

Dim search = New Dictionary(Of String, String) From {
    {"EmpName", "Rachel"},
    {"EmpID", "1100320"}
}

Dim searchParameters = New Dictionary(Of String, Object) From {
    {"Search", search},
    {"IncludeAttributes", New String() {"EmpId", "EmpName", "Department", "Salary", "ManagerId"}}
}

Dim jsonSearchParameters = JsonConvert.SerializeObject(searchParameters)
Dim stringContent = New StringContent(jsonSearchParameters, Encoding.UTF8, "application/json")

或者,创建一个类来保存参数:

Public Class Search
    Public Property EmpName As String
    Public Property EmpID As String
End Class

Public Class SearchParameters
    Public Property Search As Search
    Public Property IncludeAttributes As String()
End Class

然后用适当的数据填充类:

Dim search = New Search With
    {
        .EmpName = "Rachel",
        .EmpID = "1100320"
    }

Dim searchParameters = New SearchParameters With
    {
        .Search = search,
        .IncludeAttributes = New String() {"EmpId", "EmpName", "Department", "Salary", "ManagerId"}
    }

Dim jsonSearchParameters = JsonConvert.SerializeObject(searchParameters)
Dim stringContent = New StringContent(jsonSearchParameters, Encoding.UTF8, "application/json")

【讨论】:

  • 谢谢“theduck”。课堂创意也确实不错。我继续使用字符串字典,对象。
【解决方案2】:

正如 cricket_007 建议的那样,我尝试了字符串、对象字典,它就像一个魅力。对于其他遇到类似问题的人来说,这是我的一段代码,它有效:

Dim searchParameters = New Dictionary(Of String, String)()
searchParameters.Add("EmpId", EmpId)
searchParameters.Add("EmpName", "Rachel")

Dim includeAttributes() As String = {"EmpId", "Name", "Dept", "Manager", "Salary"}

Dim SearchAttributes As New Dictionary(Of String, Object)
SearchAttributes.Add("Search", searchParameters)
SearchAttributes.Add("IncludeAttributes", includeAttributes)

Dim jsonSearchParameters = JsonConvert.SerializeObject(SearchAttributes)

【讨论】:

    猜你喜欢
    • 2013-06-25
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2019-09-12
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多