title: EmitDefaultValue=false only working for strings
body: <p>I am trying to serialize the following c# class to XML </p>
  
  <pre><code>[DataContract]
  public class LatLonPoint
  {
    [DataMember(IsRequired = true, Order = 1)]
    public float Lat { get; set; }
  
    [DataMember(IsRequired = true, Order = 2)]
    public float Lon { get; set; }
  
    [DataMember(EmitDefaultValue = false, Order = 3)]
    public DateTime? OptimalTime { get; set; }
  }
  </code></pre>
  
  <p>When I serialize this class using the following code</p>
  
  <pre><code>public static string GetLatLonPointXml(LatLonPoint data)
  {
    XmlSerializer xmlSerializer = new XmlSerializer(data.GetType());
  
    using ( StringWriter stringWriter = new StringWriter() )
    {
      xmlSerializer.Serialize(stringWriter, data);
      return stringWriter.ToString();
    }
  }
  </code></pre>
  
  <p>I get the following result</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-16"?&gt;
  &lt;LatLonPoint xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
    &lt;Lat&gt;30&lt;/Lat&gt;
    &lt;Lon&gt;-97&lt;/Lon&gt;
    &lt;OptimalTime xsi:nil="true" /&gt;
  &lt;/LatLonPoint&gt;
  </code></pre>
  
  <p>Why is the OptimalTime being output when I have added the EmitDefaultValue to the DataMember attribute?  I have been able to get EmitDefaultValue to work with strings, but not anything else.  Thank you very much for your help.</p>