In the .NET Framework, the DataSet's WriteXml method when used to create a DiffGram does not provide the capability to include schema information along with the data. This is more of a design choice than an objective difficulty, though. When you return a DataSet object from a Web service method your clients receive a special flavor of DiffGram object made of schema and data. The output is shown here:
<DataSet>
<xs:schema> ... </xs:schema>
<diffgr:diffgram ... >
...
</diffgr:diffgram>
</DataSet>
Technically speaking, the Web service serialization of a DataSet object is not obtained through WriteXml and the final output is not a true DiffGram, but rather a new XML format that incorporates a DiffGram. Such a new format is not produced by WriteXml but comes care of the XML serializer--the XmlSerializer class. The following code shows how to serialize a DataSet object to obtain a DiffGram with schema.
Dim sw As StreamWriter = New StreamWriter(fileName)
Dim writer As XmlTextWriter = New XmlTextWriter(sw)
writer.Formatting = Formatting.Indented
Dim ds As DataSet = InitializeTheDataSet()
Dim ser As XmlSerializer = New XmlSerializer(GetType(DataSet))
ser.Serialize(writer, ds)
It should be clear by now that you need the XML deserializer to read this new breed of DiffGram. The code is the following:
Dim ser As XmlSerializer = New XmlSerializer(GetType(DataSet))
Dim ds As DataSet = CType(ser.Deserialize(writer, ds), DataSet)
Source:
Applied XML Programming for Microsoft .NET, Dino Esposito, Microsoft Press 2002