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

C# Discussion :

Problème de sérialisation


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut Problème de sérialisation
    J'ai un objet que je dois sérialiser en XML. Pour les besoins demandés je suis obligé de le fournir en XML, et non en binaire.

    Ma classe contient deux proprités:
    - un string
    - un élément qui va contenir un élement sérialiser en binaire

    J'arrive bien à sérialiser mon objet. Mais la déserialisation plante à cause des caractères spéciaux.

    Comment faire pour que ça ne plante pas ?

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    using System;
    using System.Collections;
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Text;
    using System.Xml;
    using System.Xml.Serialization;
     
    namespace MonProg
    {
    	class Class1
    	{
    		[STAThread]
    		static void Main(string[] args)
    		{
    			Hashtable hash = new Hashtable();
     
    			hash.Add("Test1", "Val1");
    			hash.Add("Test2", "Val2");
     
    			//Serialisation binaire de ma hashtable
    			MemoryStream stream = new MemoryStream();
    			BinaryFormatter bf = new BinaryFormatter();
    			bf.Serialize(stream,hash);
     
    			stream.Position = 0;
    			string data = new StreamReader(stream).ReadToEnd();
     
    			Exemple ex = new Exemple("coucou", data);
     
    			//Serialisation
    			string xml = ex.GetXml();
     
    			//Deserialisation (plantage)
    			Exemple ex2 = Exemple.FromXml(xml);
     
    			Console.ReadLine();
    		}
    	}
     
    	public class Exemple
    	{
    		private string _s;
    		private string _h;
     
    		public Exemple()
    		{
    		}
     
    		public Exemple(string s, string h)
    		{
    			_s = s;
    			_h = h;
    		}
     
    		public string GetXml()
    		{
    			MemoryStream stream = new MemoryStream();
    			XmlTextWriter flow = new XmlTextWriter(stream, Encoding.UTF8);
     
    			XmlSerializer serialiseur = new XmlSerializer(typeof(Exemple));
     
    			serialiseur.Serialize(flow,this);
     
    			stream.Position = 0;
    			string xml = new StreamReader(stream).ReadToEnd();
    			flow.Close();
     
    			return xml;
    		}
     
    		public static Exemple FromXml(string xml)
    		{			
    			XmlSerializer serialiseur = new XmlSerializer(typeof(Exemple));
     
    			MemoryStream stream = new MemoryStream();
     
    			StringReader strReader = new StringReader(xml);
    			Exemple tmp = (Exemple)serialiseur.Deserialize(strReader);	
     
    			return tmp;	
    		}
     
    		public string S
    		{
    			get{ return _s;}
    			set { _s = value;}
    		}
     
    		public string H
    		{
    			get{ return _h;}
    			set { _h = value;}
    		}
    	}
    }

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Et cela plante où dans ta méthode ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    Ca plante sur la ligne

    Exemple tmp = (Exemple)serialiseur.Deserialize(strReader);
    De la fonction FromXml


    Le message d'erreur
    Une exception non gérée du type 'System.InvalidOperationException' s'est produite dans system.xml.dll

    Informations supplémentaires : Il existe une erreur dans le document XML (1, 161).
    La variable XML
    <?xml version="1.0" encoding="utf-8"?><Exemple xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><S>coucou</S><H>&#x0;&#x1;&#x0;&#x0;&#x0;&#x1;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x4;&#x1;&#x0;&#x0;&#x0;&#x1C;System.Collections.Hashtable&#x7;&#x0;&#x0;&#x0;\nLoadFactor&#x7;Version&#x8;Comparer&#x10;HashCodeProvider&#x8;HashSize&#x4;Keys&#x6;Values&#x0;&#x0;&#x3;&#x3;&#x0;&#x5;&#x5;&#xB;&#x8;&#x1C;System.Collections.IComparer$System.Collections.IHashCodeProvider&#x8;Q8?&#x2;&#x0;&#x0;&#x0;\n\n&#xB;&#x0;&#x0;&#x0;\t&#x2;&#x0;&#x0;&#x0;\t&#x3;&#x0;&#x0;&#x0;&#x10;&#x2;&#x0;&#x0;&#x0;&#x2;&#x0;&#x0;&#x0;&#x6;&#x4;&#x0;&#x0;&#x0;&#x5;Test1&#x6;&#x5;&#x0;&#x0;&#x0;&#x5;Test2&#x10;&#x3;&#x0;&#x0;&#x0;&#x2;&#x0;&#x0;&#x0;&#x6;&#x6;&#x0;&#x0;&#x0;&#x4;Val1&#x6;&#x7;&#x0;&#x0;&#x0;&#x4;Val2&#xB;</H></Exemple>
    C'est un problème de caractères spéciaux mais comment faire pour éviter ce problème ?

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    En utilisant encoding sur xml pour changer le système d'encodage, cela passera peut être mieux.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    Comment ?

    J'ai fait un encoding sur
    XmlTextWriter flow = new XmlTextWriter(stream, Encoding.UTF8);

    J'ai testé les autres encodages et toujours la même erreur.

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    J'aurais plus utilisé l'encoding sur ton string xml.

Discussions similaires

  1. [Tableaux] Problème de sérialisation
    Par Langly dans le forum Langage
    Réponses: 1
    Dernier message: 29/12/2006, 20h22
  2. [Débutant] Problème de sérialisation collection
    Par Michel Hubert dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 21/12/2006, 15h17
  3. problème de sérialisation
    Par yoyomc dans le forum Langage
    Réponses: 5
    Dernier message: 17/12/2006, 23h02
  4. Réponses: 4
    Dernier message: 12/12/2006, 10h22
  5. Problème de sérialisation
    Par CheryBen dans le forum Entrée/Sortie
    Réponses: 18
    Dernier message: 15/09/2005, 11h55

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