在Webservice方法中返回DataSet,内容包含空格的问题。 600分
nxct 2006-09-25 08:07:20 我在VB.Net和WebService小分类中都发了贴,但是感觉C#分类人气比较旺,所以在这里也发一下吧。:)
因为问题的原因和开发语言无关,所以我这里贴的是VB的代码,请大家见谅。
另两个帖子地址如下:
http://community.csdn.net/Expert/topic/5047/5047257.xml?temp=.9880487
http://community.csdn.net/Expert/topic/5047/5047144.xml?temp=.643078
辛苦各位帮我想想这个问题该怎么解决:
在一个Webservice方法的返回值是一个DataSet类型的对象,返回结果中的一些内容是一个空格组成的字符串。
Webservice方法(VB.Net):
<WebMethod()> _
Public Function GetDataSet() As DataSet
Dim ds As DataSet = New DataSet("dsRESULT")
Dim dt As DataTable = New DataTable("dtRESULT")
dt.Columns.Add("A", "".GetType())
dt.Columns.Add("B", "".GetType())
dt.Columns.Add("C", "".GetType())
Dim dr As DataRow
dr = dt.NewRow()
dr(0) = ""
dr(1) = " "
dr(2) = " "
dt.Rows.Add(dr)
dr = dt.NewRow()
dr(0) = "a"
dr(1) = " a"
dr(2) = " a "
dt.Rows.Add(dr)
ds.Tables.Add(dt)
Return ds
End Function
通过IE进行测试,返回的XML文件结果内容中可以看到正确的返回结果:
<?xml version="1.0" encoding="utf-8"?>
<DataSet xmlns="http://tempuri.org/WebServiceTest/Service1">
<xs:schema id="dsRESULT" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="dsRESULT" msdata:IsDataSet="true" msdata:Locale="ja-JP">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="dtRESULT">
<xs:complexType>
<xs:sequence>
<xs:element name="A" type="xs:string" minOccurs="0" />
<xs:element name="B" type="xs:string" minOccurs="0" />
<xs:element name="C" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<dsRESULT xmlns="">
<dtRESULT diffgr:id="dtRESULT1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<A />
<B> </B>
<C> </C>
</dtRESULT>
<dtRESULT diffgr:id="dtRESULT2" msdata:rowOrder="1" diffgr:hasChanges="inserted">
<A>a</A>
<B> a</B>
<C> a </C>
</dtRESULT>
</dsRESULT>
</diffgr:diffgram>
</DataSet>
但是,在一个WindowsForm的应用程序中调用WebService方法,返回的结果,却与预想的不一致,返回结果中的空格组成的字符串,都被识别成为空字符串了。例子如下:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim service As localhost.Service1 = New localhost.Service1
Dim dsResult As DataSet = service.GetDataSet()
Dim dtResult As DataTable = dsResult.Tables(0)
Dim sbResult As System.Text.StringBuilder = New System.Text.StringBuilder
For i As Integer = 0 To dtResult.Rows.Count - 1
For j As Integer = 0 To dtResult.Columns.Count - 1
sbResult.Append("[" + dtResult.Rows(i)(j).ToString() + "]")
sbResult.Append(dtResult.Rows(i)(j).ToString().Length.ToString() + ",")
Next
Next
System.Console.Out.WriteLine(sbResult.ToString())
End Sub
输出结果为:
[]0,[]0,[]0,[a]1,[ a]2,[ a ]3,
可以看到,返回结果中的空格组成的字符串,全部被识别为空字符串了,与原始数据不一致。
大家有没有遇到过这种问题?有没有好的解决方法?请赐教。