serializable datatables and web services in ado.net 2.0

In ado.net 2.0, datatables are serializable (grin grin grin) so that means you can return them from a web service (though you must fill the tablename property first). Below is what the xml looks like (compared below that, to what the same table looks look like  in a dataset)

Not much difference here. But it creates a few less steps on both the web service end and the client end and it bridges a gap for developers. I wonder how many of us tried to return a datatable from a webservice because we didn’t understand the depths of xml serialization and that datatable, up until now, did not implement iSerializable. And then had to do a bit of digging before we found a sentence somewhere that explained that you need to return the dataset. So we save some coding, but also a whole lot of figgerin’ for those folks who don’t need to grok soap and serialization just to move some data around.

 <?xml version=”1.0″ encoding=”utf-8″ ?>

– <DataTable xmlns=”http://tempuri.org/“>
– <xs:schema id=”NewDataSet“ xmlns=”“ xmlns:xs=”http://www.w3.org/2001/XMLSchema“ xmlns:msdata=”urn:schemas-microsoft-com:xml-msdata“>
– <xs:element name=”NewDataSet“ msdata:IsDataSet=”true“ msdata:MainDataTable=”julietable“>
– <xs:complexType>
– <xs:choice minOccurs=”0“ maxOccurs=”unbounded“>
– <xs:element name=”julietable“>
– <xs:complexType>
– <xs:sequence>
  <xs:element name=”au_id“ type=”xs:string“ minOccurs=”0“ />
  <xs:element name=”au_lname“ type=”xs:string“ minOccurs=”0“ />
  <xs:element name=”au_fname“ type=”xs:string“ minOccurs=”0“ />
  <xs:element name=”phone“ type=”xs:string“ minOccurs=”0“ />
  <xs:element name=”address“ type=”xs:string“ minOccurs=”0“ />
  <xs:element name=”city“ type=”xs:string“ minOccurs=”0“ />
  <xs:element name=”state“ type=”xs:string“ minOccurs=”0“ />
  <xs:element name=”zip“ type=”xs:string“ minOccurs=”0“ />
  <xs:element name=”contract“ type=”xs:boolean“ 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“>
– <DocumentElement xmlns=”“>
– <julietable diffgr:id=”julietable1“ msdata:rowOrder=”0“>
  <au_id>172-32-1176</au_id>
  <au_lname>White</au_lname>
  <au_fname>chris</au_fname>
  <phone>408 222-1229</phone>
  <address>10932 Bigge Rd.</address>
  <city>Menlo Park</city>
  <state>CA</state>
  <zip>94025</zip>
  <contract>true</contract>
  </julietable>
  </DocumentElement>
  </diffgr:diffgram>
  </DataTable>

————————

  <?xml version=”1.0″ encoding=”utf-8″ ?>
– <DataSet xmlns=”http://tempuri.org/“>
– <xs:schema id=”NewDataSet“ xmlns=”“ xmlns:xs=”http://www.w3.org/2001/XMLSchema“ xmlns:msdata=”urn:schemas-microsoft-com:xml-msdata“>
– <xs:element name=”NewDataSet“ msdata:IsDataSet=”true“>
– <xs:complexType>
– <xs:choice minOccurs=”0“ maxOccurs=”unbounded“>
– <xs:element name=”julietable“>
– <xs:complexType>
– <xs:sequence>
  <xs:element name=”au_id“ type=”xs:string“ minOccurs=”0“ />
  <xs:element name=”au_lname“ type=”xs:string“ minOccurs=”0“ />
  <xs:element name=”au_fname“ type=”xs:string“ minOccurs=”0“ />
  <xs:element name=”phone“ type=”xs:string“ minOccurs=”0“ />
  <xs:element name=”address“ type=”xs:string“ minOccurs=”0“ />
  <xs:element name=”city“ type=”xs:string“ minOccurs=”0“ />
  <xs:element name=”state“ type=”xs:string“ minOccurs=”0“ />
  <xs:element name=”zip“ type=”xs:string“ minOccurs=”0“ />
  <xs:element name=”contract“ type=”xs:boolean“ 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“>
– <NewDataSet xmlns=”“>
– <julietable diffgr:id=”julietable1“ msdata:rowOrder=”0“>
  <au_id>172-32-1176</au_id>
  <au_lname>White</au_lname>
  <au_fname>chris</au_fname>
  <phone>408 222-1229</phone>
  <address>10932 Bigge Rd.</address>
  <city>Menlo Park</city>
  <state>CA</state>
  <zip>94025</zip>
  <contract>true</contract>
  </julietable>
</NewDataSet>
  </diffgr:diffgram>
  </DataSet>

  Sign up for my newsletter so you don't miss my conference & Pluralsight course announcements!  

Leave a Reply

Your email address will not be published. Required fields are marked *


The reCAPTCHA verification period has expired. Please reload the page.

This site uses Akismet to reduce spam. Learn how your comment data is processed.