IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez .NET Discussion :

Serialisation Générique


Sujet :

Contribuez .NET

  1. #1
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut Serialisation Générique
    Bonjour,

    Je vous propose un nouvel élément à utiliser : Serialisation Généique

    Un petit exemple avec sérialisation générique applicable a tout modèle de classe

    Qu'en pensez-vous ?

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    L'ensemble du code proposé se base sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //On crée une instance de XmlSerializer dans lequel on lui spécifie le type
                //de l'objet à sérialiser. On utiliser l'opérateur typeof pour cela.
                XmlSerializer serializer = new XmlSerializer(typeof(T));
    Or, il y a des cas où ce morceau de code ne fonctionne pas (pas de constructeur sans argument ou non publique).
    Cette problématique a été vue ici : XmlSerializer : sérialiser mon propre objet

    Cependant, il n'y a pas de FAQ parlant de la sérialisation en C# et de ces problématiques. Ce code peut-être ajouter avec les avertissement nécessaire.


    A class that implements the interface must have a parameterless constructor. This is a requirement of the XmlSerializer class.
    source: IXmlSerializable Interface

  3. #3
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    Il faut juste avoir des objets Public !!!

  4. #4
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Non.Comme précédemment cité :
    A class that implements the interface must have a parameterless constructor.

  5. #5
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    Si tu teste l'exemple il n'y a pas des constructeurs !!

  6. #6
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Oui, sauf qu'une classe n'ayant pas de constructeur déclaré à par défaut le constructeur sans paramètres :
    If a class contains no instance constructor declarations, a default instance constructor is automatically provided. That default constructor simply invokes the parameterless constructor of the direct base class. If the direct base class does not have an accessible parameterless instance constructor, a compile-time error occurs. If the class is abstract then the declared accessibility for the default constructor is protected. Otherwise, the declared accessibility for the default constructor is public.
    Donc, oui ton code ne déclare pas de constructeur. Cependant, ton code nécessite bien un constructeur sans paramètres qui est fournit automatiquement dans ton cas. Il y aura une erreur, dans le cas où l'une des classes à sérialiser ou dé sérialiser déclare un constructeur avec paramètres et ne déclare pas de constructeurs sans paramètres.

    Source : https://msdn.microsoft.com/en-us/lib...=vs.71%29.aspx

  7. #7
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    Oui c'est le constructeur par défaut, par contre ta raison si on déclare un constructeur avec paramètres il faut rajouter un constructeur sans paramètres

  8. #8
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Donc, la solution n'est pas au sens strict générique.

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,

    Oui il n'y a pas de constructeurs car ils sont implicites, dans le cas ou il n'y en a pas de précisé le compilateur crée un constructeur vide sans paramètre.
    Mais rien n'empêche de créer un constructeur sans paramètre et de le définir comme private pour que justement il ne soit instanciable sans paramètre, c'est même plutot fréquent dans le monde de la POO je dirais.
    Un véhicule a forcément un nombre de roue donc la classe véhicule sera instaciable uniquement à partir d'un entier supérieur à 0 par exemple, et on créera un constructeur privé, sans paramètre, dans lequel on initialisera les variables privée par exemple.

    [EDIT] désolé j'ai 3 post de retard...

    J@ck.

  10. #10
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par kolodz Voir le message
    Donc, la solution n'est pas au sens strict générique.
    C'est générique mais il y a un cas particulier

  11. #11
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 502
    Points
    1 502
    Par défaut
    Salut,

    Pendant que j'y pense, pour rendre le truc plus solide, on aurait put modifier les declaration des methodes, Serialise et DeSerialise pour mettre la contrainte de constructeur vide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static void Serialise<T>(T t,String filename) Where T : new()

  12. #12
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Il ne me semble pas que cela soit une syntaxe valable dans les anciennes versions.
    Donc, ce n'était pas possible à l'époque.
    Et aujourd'hui, ce n'est pas envisageable pour cause de rétrocompatibilité.

    Dans tout les cas, cela ne change pas le problème de ces sources.

    Cordialement,
    Patrick Kolodziejczyk.

Discussions similaires

  1. Webservice / Serialisation / Type générique / Héritage
    Par XAMLdev dans le forum Services Web
    Réponses: 4
    Dernier message: 26/06/2012, 11h40
  2. [Serialisation] methode générique ?
    Par Deallyra dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 26/01/2009, 12h05
  3. [VB6]Sérialiser un objet
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 11/10/2003, 11h05
  4. Serialiser de gros documents XML
    Par philemon_siclone dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 17/09/2003, 16h26
  5. caractère générique utilisable dans strcmp
    Par barthelv dans le forum C
    Réponses: 9
    Dernier message: 01/08/2003, 17h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo