This post is very old but for what it is worth I would have liked to find this solution out there when I was searching so here it is:
I had a similar problem where I created a disk cache solution using datasets, I wrote the files using DataSet.WriteXML(filePath) and read them back in via DataSet.ReadXML(filePath). Exceptions were thrown if I tried to access a column from the dataset that was null. To get around this problem simply include the Schema when you read and write so that when you access the data the dataset object understands that the column exists but contains no data.
There are 2 ways of doing this depending upon your approach:
1) If you are using the same output for each call it is probably more efficient to reuse schemas:
MyDataSet.WriteXML(file)
MyDataSet.WriteXMLSchema(fileUniqueToOutputStructure)
MyDataSet.ReadXMLSchema(fileUniqueToOutputStructure)
MyDataSet.ReadXML(file)
2) Or, with a little more overhead but easier to manage and write - just write the XML schema into each dataset output:
DataSet.WriteXml(file, XmlWriteMode.WriteSchema)
DataSet.ReadXml(file, XmlReadMode.ReadSchema)