从Web Service返回空字符串

时间:2014-07-03 17:59:24

标签: asp.net json vb.net web-services wcf

我遇到了一个我创建的Web服务的问题:我的Web服务正在返回Stream (我不希望函数返回我的字符串..正好流!)事情是如果流是空的,它开始下载一个空的文件。 如何强制执行代码以返回纯空JSON字符串而不是空文件。 (如果我们说我没有通过一个参数开始下载一个空的文件)

如果流为空我想要返回空字符串: {"结果" :[],"状态" :" ZERO_RESULTS"}到函数!

这是我的网络服务:

Public Class Service1
    Dim m_SelPerson As String = String.Empty
    <OperationContract()>
    <WebGet(ResponseFormat:=WebMessageFormat.Json, UriTemplate:="/getPersonInfo/?personID={personID}&companyCode={companyCode}", BodyStyle:=WebMessageBodyStyle.Bare)>
    Public Function getPersonInfo(ByVal personID As String, ByVal companyCode As String) As Stream
        Try
            Dim dba As New DBAccess
            Dim person As New PersonInfo
            Dim ds As DataSet = dba.GetPersonInfo(personID, companyCode)
            If Not ds Is Nothing Then
                Dim dr As DataRow = ds.Tables(0).Rows(0)
                person = New PersonInfo
                If Not String.IsNullOrEmpty(dr("UserID")) Then
                    person.UserID = Convert.ToInt32(dr("UserID"))
                End If
                person.PersonID = Convert.ToInt32(dr("PersonID"))
                person.Company = dr("Company")
                person.Title = dr("Title")
                person.CellNum = dr("CellNum")
                person.EmergencyPhone = dr("EmergencyPhone")
                person.Email = dr("Email")
                person.PersonImageName = dr("PersonImageName")
                Dim oSerilzer As New System.Web.Script.Serialization.JavaScriptSerializer
                m_SelPerson = oSerilzer.Serialize(person)
                WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8"
                Return New MemoryStream(Encoding.UTF8.GetBytes(m_SelPerson))
                'Return m_SelPerson
            Else
                Return New MemoryStream(m_SelPerson)
            End If
            'Return New MemoryStream(Encoding.UTF8.GetBytes(m_SelPerson))
        Catch ex As Exception
            Return New MemoryStream(m_SelPerson)
        End Try
    End Function
End Class

1 个答案:

答案 0 :(得分:0)

除了设置 m_SelPerson =“{”“results”“:[],”“status”“:”“ZERO_RESULTS”“}”

为什么不把它变成一个很好的xml字符串......

抓取数据集,无需解析任何内容...... 使用XML从表数据中创建XMDocument,并使用列和值。其中DS是您的数据集..

 Dim XMLDOX As New System.Xml.XmlDocument

 Try
     XMLDOX.LoadXml(DS.GetXml)
 Catch
     ' deal with it.
 End try

  Dim ms As Io.MemoryStream
  ms = New MemoryStream(New ASCIIEncoding().GetBytes(XMLDOX.InnerXml.ToString))

然后,您的内存流是一个很好的XML表,其中包含Columns和值,由数据集表定义,并且非常易于使用。

 <table1><row><UserID>something</userid><PersonID>123</PersonID></Company>... and so on...  </row></table>

您可以先测试数据集中的行,然后编码应用程序在其空白时可以使用的响应..

  if ds.tables(0).rows.count=0 then 
       ms = New MemoryStream(New ASCIIEncoding().GetBytes("</noresults>"))
   end if