呼叫API傳遞JSON問題

小偉
請求的格式是這樣,是沒有問題
POST-> http://XXX/TelefaxHelper/API/Query/GetAddressDic
請求:
{
"account":"test",
"token":"vdfhgf5r656",
"CityCode":"D",
"CityAreaCode":"D39",
"Address":"中華路459巷100號"
}
        Dim webClient = New WebClient()
        ' 指定 WebClient 編碼
        webClient.Encoding = Encoding.UTF8
        ' 指定 WebClient 的 authorization header
        webClient.Headers.Add("authorization", "token {apitoken}")
        '要傳送的資料內容
        Dim nameValues As NameValueCollection = New NameValueCollection()
        nameValues("account") = "92h"           
        nameValues("token") = Label10.Text      

        nameValues("CityCode") = left(Label17.TEXT, 1)
        nameValues("CityAreaCode") = Label17.TEXT
        nameValues("Address") = 內容

        ' 執行 post 動作
        Dim result
        result = webClient.UploadValues("http://XXX/TelefaxHelper/API/Query/GetAddressDic", nameValues)

        '將 post 結果轉為 string
        Dim resultstr As String = Encoding.UTF8.GetString(result)

        Dim Obj As Newtonsoft.Json.Linq.JObject = Newtonsoft.Json.JsonConvert.DeserializeObject(resultstr)


那如果是中間有List清單
POST-> http://XXX/TelefaxHelper/API/Query/GetResult
請求:
{
"account":"test",
"token":"fdhgfh455",
"querytype":"B",
"queryvalue":"A_11_0050_2309",
"ifQuanta":"1",
"ownerList":{
"0008":"0008/李**",
"0010":"0010/陳**",
"0011":"0011/鄭**"
}
}
這樣我該如何傳遞呢

我是用asp.net vb.net寫的
開發工具為VS2013,Framework4.0

最有價值解答

topcat
您可以透過Visual Studio裡面【選擇性貼上】【貼上JSON作為類別】
這樣的功能

在您的系統中建立類別
然後程式中只要產生好物件,把資料設定上去
再透過JsonConvert把【物件】序列化成JSON後,就可以POST出去了

參考這個
https://dotblogs.com.tw/huayulee/2017/10/27/094009
topcat
補充一下,#1有個前提,就是您的JSON格式必須是【正確】才能正常轉為類別
要檢查JSON是否正確
可以搜尋【JSON Parser】找線上工具,來驗證JSON的格式是否正確

^_^
小偉
to topcat
好的,這部份我再試試看
小偉
我最後還是用最原始的方法,利用字串方式串接

'開始拼接字串
        Dim sb As StringBuilder = New StringBuilder()

        Dim account As String = "xxx"
        Dim token As String = Label10.Text
        Dim querytype As String = IIf(識別 = "4", "B", IIf(識別 = "4-1", "B", "L"))
        Dim queryvalue As String = 內容
        Dim ifQuanta As String = "1"

        sb.AppendLine("{")
        sb.AppendLine("""account"":""" + account + """,")
        sb.AppendLine("""token"":""" + token + """,")
        sb.AppendLine("""querytype"":""" + querytype + """,")
        sb.AppendLine("""queryvalue"":""" + queryvalue + """,")
        sb.AppendLine("""ifQuanta"":""" + ifQuanta + """,")
        If 打勾識別 = False Then
            sb.AppendLine("""ownerList"":{}")
        Else
            sb.AppendLine("""ownerList"":{")
            For i As Integer = 0 To GridView7.Rows.Count - 1
                If 識別 = "4" Then
                    後筆數 += 1
                    If 筆數 = 後筆數 Then
                        sb.AppendLine(CType(GridView7.Rows(i).Cells(0).FindControl("Label8"), Label).Text)
                    Else
                        sb.AppendLine(CType(GridView7.Rows(i).Cells(0).FindControl("Label8"), Label).Text + ",")
                    End If
                Else
                    If CType(GridView7.Rows(i).Cells(0).FindControl("CheckBox1"), CheckBox).Checked = True Then
                        後筆數 += 1
                        If 筆數 = 後筆數 Then
                            sb.AppendLine(CType(GridView7.Rows(i).Cells(0).FindControl("Label8"), Label).Text)
                        Else
                            sb.AppendLine(CType(GridView7.Rows(i).Cells(0).FindControl("Label8"), Label).Text + ",")
                        End If
                        Label33.Text += CType(GridView7.Rows(i).Cells(0).FindControl("Label8"), Label).Text
                    End If
                End If
            Next
            sb.AppendLine("}")
        End If

        sb.AppendLine("}")

        Dim webClient = New WebClient()
        ' 指定 WebClient 編碼
        webClient.Encoding = Encoding.UTF8
        ' 指定 WebClient 的 Content-Type header
        webClient.Headers.Add(HttpRequestHeader.ContentType, "application/json")
        ' 指定 WebClient 的 authorization header
        webClient.Headers.Add("authorization", "token {apitoken}")

        Dim resultstr
        resultstr = webClient.UploadString("http://xxx/GetResult", sb.ToString())
        ' linqpad 將 post 結果輸出
        'result.Dump()

        Dim Obj As Newtonsoft.Json.Linq.JObject = Newtonsoft.Json.JsonConvert.DeserializeObject(resultstr)

topcat

在MVC,WebAPI 有很多機會
會做【物件進物件出】的行為
這些行為其實不用太多的程式碼

搭配Client端的html, js
也是取(get)物件、送(post)物件

所以比較建議您把卡到的關卡打通
未來要開發類似的東西會比較順利唷

回頭來說說,您到底是遇到什麼問題?
建議您打通一關卡,對於您未來應該會很有幫助

^.^a

回到頂部