2010-03-26 5 views
6

Lorsque je sérialise un objet qui contient un DateTime, cela renvoie un caractère vide dans la chaîne XML.XMlSerialization ne sérialise pas une date-heure

Veuillez voir ci-dessous pour mon XSD, classe sérialisable générée à partir du XSD, et la classe d'assistance de sérialisation qui gère la sérialisation du 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> 

sérialiseur:

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

classe Serializable

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

Pourquoi le DateTime valeur étant sérialisé dans une chaîne vide?

Répondre

12

Définissez-vous DateOfBirthFieldSpecified à true? Il va par défaut à false, ce qui signifie: ne pas sérialiser cela.

+0

Ouais, vous avez absolument raison merci alot.i regardé cela depuis des siècles et ne pouvait pas comprendre ce qui se passait. merci encore beaucoup apprécié! – Somedeveloper

+0

Alors ... le sérialiseur ne sérialisera pas un MyThing s'il existe aussi une propriété appelée MyThingSpecified ... et MyThingSpecified est défini sur true? –

+0

@Peter s'il y a un MyThingSpecified, il ne sérialisera MyThing que si MyThingSpecified est ** true ** –

Questions connexes