Json Web API控制器-返回的数据的正确格式是什么

Json Web API控制器-返回的数据的正确格式是什么,json,asp.net-web-api,Json,Asp.net Web Api,我有一个Web API控制器,用于检索票证信息。在开始时——调用API并将请求路由到适当的控制器函数。控制器将请求传递给数据库。从那里检索到的数据通过字典块运行,其中字段名与数据关联。接下来,数据被序列化。然后将数据传回控制器。此时,我知道Json字符串看起来不错。但是,当格式正确的json数据被传递回调用方时,会在输出中添加一组斜杠 我的理解是WebAPI应该自动格式化返回数据。我怀疑在返回控制器之前,我正在正确格式化控制器的数据 Public Function GetTicketSe

我有一个Web API控制器,用于检索票证信息。在开始时——调用API并将请求路由到适当的控制器函数。控制器将请求传递给数据库。从那里检索到的数据通过字典块运行,其中字段名与数据关联。接下来,数据被序列化。然后将数据传回控制器。此时,我知道Json字符串看起来不错。但是,当格式正确的json数据被传递回调用方时,会在输出中添加一组斜杠

我的理解是WebAPI应该自动格式化返回数据。我怀疑在返回控制器之前,我正在正确格式化控制器的数据

    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

这可能是因为您再次尝试将json数据转换为json,这会导致额外的斜杠。
在返回“objJsonRptRtn”之前,您能显示代码吗?

结果表明我是双重序列化的。我删除了序列化字典输出的语句。然后,只需将字典传递回控制器,然后让控制器返回字典。一切都很好

          '--------------------------------------------------------- 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

我几乎100%肯定这就是正在发生的事情。在BLL代码中,我创建了一个字典,将字段名绑定到数据。接下来我要做的是将数据消毒为Json。我记得读到API也会自动执行此操作。帮助我的是,在API序列化数据并将其传递回调用方之前,找出如何准备数据。与其创建字典,不如创建一个包含所有这些字段的对象,然后返回该对象,而不将其传递给序列化程序