Regarding John Saunders' good observation about the NetDataContractSerializer. The NetDataContractSerializer is pretty obscure, almost an Easter Egg for XML Serialization. I have VB.NET specific blog post that shows how to create the source code for the necessary attribute, and what the resultant XML looks, http://bejabbers2.blogspot.com/2010/03/making-case-for-netdatacontractserializ.html.
Here is what a serialized class looks like
<s:Body>
<DetermineCoordinates xmlns="http://tempuri.org/">
<LocationInfo z:Id="1" z:Type="SharedTypes.LocationInfo" z:Assembly="SharedTypes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" xmlns="http://schemas.datacontract.org/2004/07/SharedTypes" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<latitude>0</latitude>
<longitude>0</longitude>
<postalCode z:Id="2">90125</postalCode>
</LocationInfo>
</DetermineCoordinates>
</s:Body>