2017-04-25 14 views
0

我有用於檢索票證信息的Web API控制器。開始時 - 調用API並將請求路由到正確的控制器功能。控制器將請求傳遞給數據庫。從那裏,檢索到的數據將通過字段塊,字段名稱與數據關聯。接下來數據被序列化。然後數據被傳回給控制器。在這一點上,我知道Json弦看起來不錯。但是,當格式正確的json數據傳回給調用者時,會在輸出中添加一堆斜槓。Web API控制器 - 要返回的數據的正確格式是什麼

我的理解是,Web API應該自動格式化返回數據。我懷疑我是否正確地格式化了控制器的數據,然後才返回。

Public Function GetTicketSearch(ByVal SourceTktNum As String) As Object 

    'GET api/outage/SourceTktNum 

    Dim strFullName As String = MethodBase.GetCurrentMethod().ReflectedType.FullName 
    Dim strMethodName As String = MethodBase.GetCurrentMethod().Name 
    Dim strClassRoutine As String = strMethodName & "/" & strFullName 

    Try 

     Dim objJsonRptRtn As Object = GetReportData_bllBLL.BLL__DataSet__GetReportData__GetData(strMARCLSysId, strLogonSysId, SourceTktNum) 

     'AT THIS POINT I KNOW THE JSON STRING LOOKS AS IT SHOULD. 

     Return objJsonRptRtn 

     'AFTER THE ABOVE STATEMENT SOMETHING HAPPENS TO THE DATA/SLASHES ARE ADDED TO THE OUTPUT TO BE RETURNED BY THE API 

    Catch ex As Exception 

     Dim strExMessage As String = ex.Message 
     Dim strStackTrace As String = ex.StackTrace 

     Dim strMsg As String = strExMessage & ControlChars.CrLf & ControlChars.Lf & strStackTrace & ControlChars.CrLf & ControlChars.Lf 

     MailLogEvent.BLL__Process__MailAndLogEvent__AddLogEntry(strMARCLSysId, strLogonSysId, 901020, dteTime_Start, 0, strMsg, strClassRoutine) 

     Throw New HttpResponseException(HttpStatusCode.InternalServerError) 

    End Try 

End Function 

代碼來創建要傳遞給控制器​​JSON對象...

 '--------------------------------------------------------- Create Json String 

     Dim dctDataDictionary As New Dictionary(Of String, String) 

     dctDataDictionary.Add("sourceTktNum", strSourceTktNumKey) 
     dctDataDictionary.Add("incidentTime", strIncidentTime) 
     dctDataDictionary.Add("incidentEndTime", strIncidentEndTime) 
     dctDataDictionary.Add("recordTimeStamp", strRecordTimeStamp) 
     dctDataDictionary.Add("outageReasonCd", strOutageReasonCd) 
     dctDataDictionary.Add("numDS3", strNumDS3) 
     dctDataDictionary.Add("numBlocked", strNumBlocked) 
     dctDataDictionary.Add("numVOIP", strNumVOIP) 
     dctDataDictionary.Add("numWireline", strNumWireline) 
     dctDataDictionary.Add("numEndUserCircuits", strNumEndUserCircuits) 
     dctDataDictionary.Add("stateCd", strStateCd) 
     dctDataDictionary.Add("city", strCity) 
     dctDataDictionary.Add("incidentDescription", strIncidentDescription) 
     dctDataDictionary.Add("causeDesc", strCauseDesc) 
     dctDataDictionary.Add("equipFailedDesc", strEquipFailedDesc) 
     dctDataDictionary.Add("networkPartDesc", strNetworkPartDesc) 
     dctDataDictionary.Add("restoreMethodDesc", strRestoreMethodDesc) 

     objJsonRptRtn = New System.Web.Script.Serialization.JavaScriptSerializer().Serialize(dctDataDictionary) 

     Return objJsonRptRtn 

回答

0

這可能會發生,因爲你又試圖將一個JSON數據轉換成JSON,這會導致額外的斜槓。 您可以在返回'objJsonRptRtn'之前顯示代碼。

+0

我幾乎100%確定這是怎麼回事。在BLL代碼中,我創建了一個字典,將字段名稱綁定到數據。接下來我要做的是將數據消毒給Json。我記得讀到API也會自動執行此操作。什麼可以幫助我找出在API序列化並將其傳回給調用者之前如何準備數據。 – JTS2045

+0

而不是創建一個字典,創建一個包含所有這些字段的對象,並返回它,而不傳遞給序列化器 – Mavil

0

事實證明,我是雙序列化。我刪除了序列化字典輸出的語句。然後,將字典傳回給控制器,然後讓控制器返回字典。一切都很好...

  '--------------------------------------------------------- Create Dictionary 

     dctDataDictionary.Add("sourceTktNum", strSourceTktNumKey) 
     dctDataDictionary.Add("incidentTime", strIncidentTime) 
     dctDataDictionary.Add("incidentEndTime", strIncidentEndTime) 
     dctDataDictionary.Add("recordTimeStamp", strRecordTimeStamp) 
     dctDataDictionary.Add("outageReasonCd", strOutageReasonCd) 
     dctDataDictionary.Add("numDS3", strNumDS3) 
     dctDataDictionary.Add("numBlocked", strNumBlocked) 
     dctDataDictionary.Add("numVOIP", strNumVOIP) 
     dctDataDictionary.Add("numWireline", strNumWireline) 
     dctDataDictionary.Add("numEndUserCircuits", strNumEndUserCircuits) 
     dctDataDictionary.Add("stateCd", strStateCd) 
     dctDataDictionary.Add("city", strCity) 
     dctDataDictionary.Add("incidentDescription", strIncidentDescription) 
     dctDataDictionary.Add("causeDesc", strCauseDesc) 
     dctDataDictionary.Add("equipFailedDesc", strEquipFailedDesc) 
     dctDataDictionary.Add("networkPartDesc", strNetworkPartDesc) 
     dctDataDictionary.Add("restoreMethodDesc", strRestoreMethodDesc) 

     Return dctDataDictionary 

Public Function GetTicketSearch(ByVal SourceTktNum As String) As Object 

    'GET api/outage/SourceTktNum 

    Dim strFullName As String = MethodBase.GetCurrentMethod().ReflectedType.FullName 
    Dim strMethodName As String = MethodBase.GetCurrentMethod().Name 
    Dim strClassRoutine As String = strMethodName & "/" & strFullName 

    Try 

     Dim dctDataDictionary As Object = GetReportData_bllBLL.BLL__DataSet__GetReportData__GetData(strMARCLSysId, strLogonSysId, SourceTktNum) 

     If dctDataDictionary Is Nothing Then 
      Throw New HttpResponseException(HttpStatusCode.PartialContent) 
     Else 
      Return dctDataDictionary 
     End If 

    Catch ex As Exception 

     Dim strExMessage As String = ex.Message 
     Dim strStackTrace As String = ex.StackTrace 

     Dim strMsg As String = strExMessage & ControlChars.CrLf & ControlChars.Lf & strStackTrace & ControlChars.CrLf & ControlChars.Lf 

     MailLogEvent.BLL__Process__MailAndLogEvent__AddLogEntry(strMARCLSysId, strLogonSysId, 901020, dteTime_Start, 0, strMsg, strClassRoutine) 

     Throw New HttpResponseException(HttpStatusCode.InternalServerError) 

    End Try 

End Function 
相關問題