basique : sérialiser un System.DateTime

Le
cbo
bonjour,
j'ai exactement 3 heures de pratique de C# et 8h de recherche sur Google !

je n'arrive pas a sérialiser comme je veux une classe de ce type :


[System.Xml.Serialization.XmlType("MaClasse")]
public class CMaClasse
{
[System.Xml.Serialization.XmlAttribute("name")]
public String m_strName;

[System.Xml.Serialization.XmlAttribute("birthdate")]
public System.DateTime m_dtBirthdate;
}

en effet, même lorsque le m_dtBirthDate n'est pas initialisé, le XML
généré contient l'attribut birthdate="0001-01-01T00:00:00"

je souhaiterai que cet attribut n'apparaisse pas lorsqu'il n'est pas
renseigné
je suppose que c'est parceque le type DateTime est un type "valeur" et
non "reference"

Comment faire ? j'ai pensé créer une classe qui contient un DateTime
mais je n'y parvient pas

merci d'avance si vous me mettez sur une piste
Chris
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Arnaud Debaene
Le #12219921
"cbo" 45085383$0$1792$
bonjour,
j'ai exactement 3 heures de pratique de C# et 8h de recherche sur Google !

je n'arrive pas a sérialiser comme je veux une classe de ce type :


[System.Xml.Serialization.XmlType("MaClasse")]
public class CMaClasse
{
[System.Xml.Serialization.XmlAttribute("name")]
public String m_strName;

[System.Xml.Serialization.XmlAttribute("birthdate")]
public System.DateTime m_dtBirthdate;
}

en effet, même lorsque le m_dtBirthDate n'est pas initialisé, le XML
généré contient l'attribut birthdate="0001-01-01T00:00:00"

je souhaiterai que cet attribut n'apparaisse pas lorsqu'il n'est pas
renseigné
je suppose que c'est parceque le type DateTime est un type "valeur" et non
"reference"



Exactement. Comme DateTime est une value-type (une struct, et pas une
class), il a *toujours* une valeur. Il n'y a pas de notion de DateTime
"vide". Du moment que tu créé un DateTime, il a forcément une valeur, la
valeur par défaut étant minuit le 1 Janvier 0 (Alleluiah! ;-).

Comment faire ? j'ai pensé créer une classe qui contient un DateTime mais
je n'y parvient pas


Soit tu fais avec le fait qu'il y aura toujours une valeur dans DateTime,
soit tu ajoutes à ta classe un flag indiquant si DateTime est valide ou pas.

Arnaud
MVP - VC
cbo
Le #12219911
hum ! merci pour la réponse !
mais pour le flag "valide"... j'avoue que je ne comprend pas comment le
faire

aurais tu un petit exemple ou un lien ?

merci en tout cas
Chris


Arnaud Debaene a écrit :
"cbo" 45085383$0$1792$
bonjour,
j'ai exactement 3 heures de pratique de C# et 8h de recherche sur Google !

je n'arrive pas a sérialiser comme je veux une classe de ce type :


[System.Xml.Serialization.XmlType("MaClasse")]
public class CMaClasse
{
[System.Xml.Serialization.XmlAttribute("name")]
public String m_strName;

[System.Xml.Serialization.XmlAttribute("birthdate")]
public System.DateTime m_dtBirthdate;
}

en effet, même lorsque le m_dtBirthDate n'est pas initialisé, le XML
généré contient l'attribut birthdate="0001-01-01T00:00:00"

je souhaiterai que cet attribut n'apparaisse pas lorsqu'il n'est pas
renseigné
je suppose que c'est parceque le type DateTime est un type "valeur" et non
"reference"



Exactement. Comme DateTime est une value-type (une struct, et pas une
class), il a *toujours* une valeur. Il n'y a pas de notion de DateTime
"vide". Du moment que tu créé un DateTime, il a forcément une valeur, la
valeur par défaut étant minuit le 1 Janvier 0 (Alleluiah! ;-).

Comment faire ? j'ai pensé créer une classe qui contient un DateTime mais
je n'y parvient pas


Soit tu fais avec le fait qu'il y aura toujours une valeur dans DateTime,
soit tu ajoutes à ta classe un flag indiquant si DateTime est valide ou pas.

Arnaud
MVP - VC




Cyber Sinh
Le #12219901
Bonjour,

Je pense que tu pourrais utiliser lez types nullable de C# 2 dans ton cas :
DateTime? time = null;

Test si ton DateTime à bien une valeur avec la méthode HasValue.

Voilà, j'espère avoir pu t'aider.

Cyber Sinh (http://fireblast.free.fr/)
Poster une réponse
Anonyme