Serialisieren eines Nullable<DateTime> XML
Ich versuche zu serialisieren einer Klasse mehrere der Daten-Mitglieder sind Nullable-Objekten, hier ist ein Beispiel
[XmlAttribute("AccountExpirationDate")]
public Nullable<DateTime> AccountExpirationDate
{
get { return userPrincipal.AccountExpirationDate; }
set { userPrincipal.AccountExpirationDate = value; }
}
Aber zur Laufzeit bekomme ich die Fehlermeldung
Nicht serialisieren Mitglied "- AccountExpirationDate' des Typs System.Nullable`1[System.DateTime]. XmlAttribute/XmlText kann nicht verwendet werden zum codieren komplexer Typen.
Jedoch habe ich überprüft und Nullable ist ein SerializableAttribute. Was mache ich falsch?
InformationsquelleAutor der Frage Scott Chamberlain | 2010-01-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nur zu serialisieren als
XmlElement
nicht alsXmlAttribute
da die Darstellung zu Komplex für ein Attribut. Das ist es, was die Ausnahme ist, sagen Sie.InformationsquelleAutor der Antwort David M
Wenn Sie nur wollen, es zu Arbeitdann vielleicht:
Dieser wird nur das Attribut, wenn es eine nicht-null-Wert.
InformationsquelleAutor der Antwort Marc Gravell
Ich habe so etwas wie dies viele Male.
InformationsquelleAutor der Antwort fre0n
Ich steckte fest in die ähnliche problem.
Ich hatte ein datetime-Eigenschaft (XmlAttribute) in einer Klasse, die wurde ausgesetzt in den WCF-Dienst.
Unten ist das, was ich gestoßen bin und die Lösung, die für mich gearbeitet :
1) XmlSerializer-Klasse war nicht serialising XmlAttribute der nullable-Typ
2) Einige Beiträge deuten zu ersetzen [XmlAttribute] mit [XmlElement(IsNullable =true)]. Aber das wird die Serialisierung des Attributs als ein Element, das ist völlig nutzlos. Aber es funktioniert gut für XmlElements
3) Einige schlagen vor, IXmlSerializable-Schnittstelle implementieren Sie in der Klasse, aber die, die nicht zulässt, dass der WCF service für Aufruf von WCF-verbrauchende Anwendung.
So auch nicht in diesem Fall.
Lösung :
Nicht markieren-Eigenschaft als null-Werte zulässt, verwenden Sie stattdessen eine ShouldSerializeXXX () - Methode, um Ihre Einschränkung.
InformationsquelleAutor der Antwort Pankaj Pawar
Definieren Serializable, kapselt Ihre Funktionalität.
Hier sind und Beispiel.
InformationsquelleAutor der Antwort Rodrigo Perez Burgues