Instead of using the SharePoint built-in Web Service (Lists.asmx) to get List Items, you can use the SharePoint's RPC Protocol - it's quite simple:
System.Net.WebClient client = new System.Net.WebClient();
client.UseDefaultCredentials = true;
string xml = client.DownloadString(http://[server]/[site]/_vti_bin/owssvr.dll?Cmd=Display&List=[Guid]&View=[Guid]&XMLDATA=1);
Now you've got the data as an XML-String and you can use .NET XML processing.
Beside, the resulting XML is not a serialized ADO.NET DataSet! It's an serialized ActiveX Recordset! In other Blogs they typically treat the XML as an ADO.NET DataSet and use the DataSet's LoadXml method. Although you can do that, it can raise trouble, especially with dates.
The correct way to fill a DataSet with the resulting XML is to use a ADO RecordSet. Add a COM reference to "Microsoft ActiveX Data Objects 2.8 Library" and use the following code:
ADODB.Stream xStream = new Stream();
xStream.Position = 0;
ADODB.Recordset rs = new ADODB.Recordset();
OleDbDataAdapter adapter = new OleDbDataAdapter();
DataSet ds = new DataSet();
That's it - the DataTable is now filled and typed absolute correctly!
This approach could also being interesting for integrating SharePoint in VB or VBA Applications.