Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

basique : sérialiser un System.DateTime

3 réponses
Avatar
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

3 réponses

Avatar
Arnaud Debaene
"cbo" a écrit dans le message de news:
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
Avatar
cbo
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" a écrit dans le message de news:
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




Avatar
Cyber Sinh
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/)