我遇到了一个我创建的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
答案 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