2016-04-01 3 views
0

Ich habe eine XSD, die ich verwendet habe, um meine Klasse zu erstellen. Wenn ich die XML-Ausgabe bekomme, werden alle meine Datetime-Datentypen nicht serialisiert. Ich bekomme keine Fehler beim Serialisieren. Ich habe das ShipDate für die Proben verwendet. Ich weiß nicht, ob das Schema-Tool einige Eigenschaften hinzufügt, die den Prozess beeinflussen. Zum Beispiel ShipDateSpecified mit XMLIgnoreAttribute.C# Serialisierung nicht serialisieren Datentyp Datetime, nur Strings

Dank im Voraus

C#

shipHdr.TradingPartnerId = "000ALLTESTID"; 
shipHdr.ShipmentIdentification = "321654987"; 
shipHdr.ShipDate = Convert.ToDateTime("2016-03-23"); 
shipHdr.CarrierProNumber = "895934589485948353"; 
shipHdr.AppointmentNumber = "24601"; 

Versand Klasse

private System.DateTime shipDateField; 
private bool shipDateFieldSpecified; 

/// <remarks/> 
[System.Xml.Serialization.XmlElementAttribute(DataType="date")] 
public System.DateTime ShipDate { 
    get { 
     return this.shipDateField; 
    } 
    set { 
     this.shipDateField = value; 
    } 
} 

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

XML-Ausgabe

<ShipmentHeader> 
     <TradingPartnerId>000ALLTESTID</TradingPartnerId> 
     <ShipmentIdentification>321654987</ShipmentIdentification> 
     <CarrierProNumber>895934589485948353</CarrierProNumber> 
     <AppointmentNumber>24601</AppointmentNumber> 
    </ShipmentHeader> 

Antwort

1

Sie werden manuell eingestellt ShipDateSpecified müssen. Die XSD gibt wahrscheinlich an, dass dies ein optionales Element ist.

Die XmlSerializer überprüft heimlich eine <ElementName>Specified Eigenschaft, bevor sie versucht, <ElementName> zu serialisieren. Wenn Sie immer eine ShipDate angeben, können Sie einfach die ShipDateSpecified Eigenschaft entfernen.

+0

Für die entsprechende Dokumentation finden Sie unter [XmlSerializer Klasse: Generierte XML-Controlling] (https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx) und suchen Sie nach * propertyNameSpecified *. – dbc

+0

danke vor allem, nur neugierig, ist das ein normales Verhalten, Überprüfung der Angegeben ??? – daniel2078

+1

Dies ist das Standardverhalten von 'XmlSerializer', aber es verunreinigt die Klasse meiner Meinung nach. Es würde schöner aussehen, wenn der Typ "DateTime?" Zulässig wäre, aber Sie brauchen immer noch eine Möglichkeit, dem Serializer mitzuteilen, ob er einen "null" -Wert schreiben oder das Element als Ganzes weglassen soll. –

0

Benötigen Sie ein Element? Wenn Sie es als Attribut markieren, wird es serialisiert.

[XmlAttribute(DataType = "date")] 
public System.DateTime ShipDate { get; set; } 
Verwandte Themen