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

ASP.NET Discussion :

Deserialization list object


Sujet :

ASP.NET

  1. #1
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut Deserialization list object
    Bonjour,

    Ma problematique est la suivante. Afin d'eviter des requetes BDD je serialize une list d'objet que je mets dans un champ cache et je desire le deserialize.

    Je serialize bien et ca fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     public static string SerializeObject<T>(T objectToSerialize)
            {
                BinaryFormatter bf = new BinaryFormatter();
                MemoryStream memStr = new MemoryStream();
     
                try
                {
                    bf.Serialize(memStr, objectToSerialize);
                    memStr.Position = 0;
     
                    return Convert.ToBase64String(memStr.ToArray());
                }
                finally
                {
                    memStr.Close();
                }
            }
    Par contre je n'arrive pas a deserialize !!!!!


    Ne me parlez pas du viewstate car mon traitement se passe dans le onInit.

    Merci à vous

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Là tu nous montre la fonction pour sérialiser. Où est celle qui désérialise qui accepte une chaine et renvoi T?

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     public static T DeSerializeObject<T>(string data)
            {
                BinaryFormatter bf = new BinaryFormatter();
                byte[] array = System.Text.Encoding.UTF8.GetBytes(data);
                MemoryStream memStr = new MemoryStream(array);
                T obj = (T)bf.Deserialize(memStr);
                memStr.Close();
                return obj; 
     
            }

  4. #4
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    J'ai une erreur comme quoi le format binaire n'est pas valide...
    {"Le flux d'entrée n'est pas un format binaire valide. Le contenu initial (en octets) est*: 41-41-45-41-41-41-44-2F-2F-2F-2F-2F-41-51-41-41-41 ..."}
    Je m'interroge sur l'intérêt de cette conversion d'ailleurs. Tu peux nous éclairer? Pourquoi ne pas faire une conversion XML "traditionnelle"?

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    J'ai la meme erreur que toi, et je ne l'a comprends pas.

    Mettre en binaire c'etait pour les performances.

  6. #6
    Membre chevronné

    Homme Profil pro
    Appui fonctionnel senior
    Inscrit en
    Juin 2007
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Appui fonctionnel senior
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 461
    Par défaut
    Bonjour,

    Je rencontre exactement le même problème dans le cadre d'un transfère d'objet pour un client/serveur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void Deserialize( byte[] data )
    {			
        BinaryFormatter bf = new BinaryFormatter();
        System.IO.MemoryStream ms = new System.IO.MemoryStream(data);
        SocketMessage m = (SocketMessage)bf.Deserialize( ms );
        ms.Close();
        oItem = m.Item;
    }
    Le problème ne vient donc pas de la conversion String => Byte[].

    La sérialisation XML est, mon sens, relativement plus lourde à mettre en place que la sérialisation binaire.
    Et c'est aussi moins performant ^^'

    Si vous avez une trouver une solution (entre temps), je suis preneur ^^ En attendant je continue de cherher.

  7. #7
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Je cherche et je tourne toujours en rond !!!!

  8. #8
    Membre chevronné

    Homme Profil pro
    Appui fonctionnel senior
    Inscrit en
    Juin 2007
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Appui fonctionnel senior
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 461
    Par défaut
    Bonjour,

    En ce qui me concerne je pense avoir trouver l'origine du problème : il y avait corruption des données lors du passage du serveur au client. La conversion et la sérialisation en sont donc pas en cause (dans mon cas).

    En ce qui te concerne, je te conseillerai (au vu des infos que tu donne) de regarder ce que tu fais de ta chaîne. Si tu la sauvegarde quelque part, regarde bien au niveau des flux.

    Sinon, essaye peut-être en conservant ton objet sous forme de byte[] et non d'une chaîne.

    J'espère que ça t'aidera ^^
    Sur ce, je vais continuer mon client/serveur :p

Discussions similaires

  1. Convertir une List<Object> en List<Toto>
    Par onlytoine dans le forum Langage
    Réponses: 7
    Dernier message: 19/01/2009, 14h37
  2. Repeater avec une datasource List<Object>
    Par Arthis dans le forum ASP.NET
    Réponses: 4
    Dernier message: 18/09/2008, 14h39
  3. Réponses: 14
    Dernier message: 14/12/2007, 15h56
  4. [JFreeChart]Problème avec une List<List<Object>>
    Par maxlegrand dans le forum 2D
    Réponses: 1
    Dernier message: 15/06/2007, 22h45
  5. caster une List<Object> en List<..>
    Par K-Kaï dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2006, 17h43

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