2010-03-26 5 views
6

Wenn ich ein Objekt serialisieren, das eine DateTime enthält, wird in der XML-Zeichenfolge leer zurückgegeben.XMlSerialization serialisiert kein Datetime

Siehe unten für meine XSD, serialisierbare Klasse generiert aus der XSD, und Serialisierung Helper-Klasse, die die Serialisierung der XSD behandelt.

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 Klasse

 //------------------------------------------------------------------------------ 
    // <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; 
       } 
      } 
     } 

Warum ist die DateTime Wert wird in eine leere Zeichenfolge serialisiert?

Antwort

12

Sie setzen auf true? Es wird standardmäßig auf false gesetzt, was bedeutet: nicht serialisieren.

+0

Ja, du bist absolut richtig, vielen Dank. Ich habe seit Ewigkeiten geschaut und konnte nicht herausfinden, was los war. Danke nochmal sehr geschätzt! – Somedeveloper

+0

Also ... der Serializer wird kein MyThing serialisieren, wenn es auch eine Eigenschaft namens MyThingSpecified ... gibt und MyThingSpecified auf True gesetzt ist? –

+0

@Peter Wenn es ein MyThingSpecified gibt, wird MyThing nur dann serialisiert, wenn MyThingSpecified ** true ** ist. –