7

When I serialize an object which has a DateTime in it this is returning empty in the XML string.

Please see below for my XSD, serializable class generated from the XSD, and serialization helper class which handles the serialization of the XSD.

XSD:

 <?xml version="1.0" encoding="utf-8"?>
     <xs:schema id="test" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="testInformation">
       <xs:complexType>
        <xs:sequence>
             <xs:element name="DateOfBirth" minOccurs="0">
               <xs:simpleType>
                 <xs:restriction base="xs:date">
                   <xs:pattern value="\d{4}-\d{2}-\d{2}" />
                 </xs:restriction>
               </xs:simpleType>
             </xs:element>
           </xs:sequence>
         </xs:complexType>
      </xs:element>
     </xs:schema>

Serializer:

     /// <summary>
         /// This static class provides methods which can be used to help with
 common xml serialiazation tasks.
         /// </summary>
         public static class XmlSerializationHelper
         {
                     public static string
 SerializeObject<ObjectToSerialize>(ObjectToSerialize
 obj)
             {
                 string responseXML = string.Empty;
                 using (MemoryStream ms = new MemoryStream())
                 using (StreamWriter output = new StreamWriter(ms,
 Encoding.UTF8))
                 using (StreamReader sr = new StreamReader(ms, Encoding.UTF8))
                 {
                     XmlSerializer xmlSerializer = new
 XmlSerializer(typeof(ObjectToSerialize));
                     xmlSerializer.Serialize(output, obj);
                     ms.Position = 0;

                     responseXML = sr.ReadToEnd();
                 }
                 return responseXML;
             }
         }

Serializable class

     //------------------------------------------------------------------------------
     // <auto-generated>
     //     This code was generated by a tool.
     //     Runtime Version:2.0.50727.3607
     //
     //     Changes to this file may cause incorrect behavior and will be
 lost if
     //     the code is regenerated.
     // </auto-generated>
     //------------------------------------------------------------------------------

     // 
     // This source code was auto-generated by xsd,
 Version=2.0.50727.42.
     // 

         using System.Xml.Serialization;


         /// <remarks/>
         [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd",
 "2.0.50727.42")]
         [System.SerializableAttribute()]
         [System.Diagnostics.DebuggerStepThroughAttribute()]
         [System.ComponentModel.DesignerCategoryAttribute("code")]
         [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
         [System.Xml.Serialization.XmlRootAttribute(Namespace="",
 IsNullable=false)]
         public partial class testInformation {

             private System.DateTime dateOfBirthField;

             private bool dateOfBirthFieldSpecified;

             /// <remarks/>
             [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
             public System.DateTime DateOfBirth {
                 get {
                     return this.dateOfBirthField;
                 }
                 set {
                     this.dateOfBirthField = value;
                 }
             }

             /// <remarks/>
             [System.Xml.Serialization.XmlIgnoreAttribute()]
             public bool DateOfBirthSpecified {
                 get {
                     return this.dateOfBirthFieldSpecified;
                 }
                 set {
                     this.dateOfBirthFieldSpecified =
 value;
                 }
             }
         }

Why is the DateTime value being serialized into an empty string?

John Saunders
  • 160,644
  • 26
  • 247
  • 397
Somedeveloper
  • 817
  • 2
  • 14
  • 31

1 Answers1

15

Are you setting DateOfBirthFieldSpecified to true ? It will default to false, meaning: don't serialize this.

Marc Gravell
  • 1,026,079
  • 266
  • 2,566
  • 2,900
  • Yeah you are absolutely right thanks alot.i have been looking at this for ages and couldnt figure out what was going on. thanks again much appreciated! – Somedeveloper Mar 26 '10 at 13:36
  • So...the serializer will not serialize a MyThing if there is also a property called MyThingSpecified...and MyThingSpecified is set to true? – Peter J Feb 05 '13 at 17:03
  • @Peter if there is a MyThingSpecified, it will only serialize MyThing if MyThingSpecified is **true** – Marc Gravell Feb 05 '13 at 18:07
  • Stumbled across this issue today, and your answer solved it, many thanks. – Peter J Feb 05 '13 at 22:12
  • thanks .. I found that applied to Enum as well since object of datetime or enum cannot be set to null.. so there should be another way to allow serialize or not except using null and thats by using another bool ***field... – Maher Abuthraa Feb 28 '14 at 07:48