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

Windows Presentation Foundation Discussion :

[Serialisation] Serialiser XmlNode


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 163
    Par défaut [Serialisation] Serialiser XmlNode
    Bonjour,

    J'ai un objet dont une dependency property est de type XmlNode. Je serialize l'objet (XamlSerializer) mais j'obtient le résultat suivant:
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <MyClass.MyProperty>
        <sx:XmlElement Prefix="" IsEmpty="True" InnerXml="" InnerText="" Value="{x:Null}" />
    </MyClass.MyProperty>
    avec xmlns:sx="clr-namespace:System.Xml;assembly=System.Xml"

    Pourtant, l'objet XmlNode n'est pas null même si les propriétés sérilisées le sont. De plus, lors de la désérialisation, j'obtient une exception

    Comment peut-on serialiser un élément XML ? Est-ce qu'il s'agit d'un problème connu ?

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    C'est ceci que tu utilises : http://www.davidpoll.com/2010/07/25/...n-silverlight/ ou la classe standard .NET XamlWriter ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 163
    Par défaut
    C'est la classe standard .NET XamlWriter.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 163
    Par défaut
    J'ai essayé avec XmlElement, XmlDocument ainsi que l'attribut [XmlAnyElement("MyProperty")] mais rien ne fonctionne...

  5. #5
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Bizarre, j'ai fait un test et XMLNode à bien été sérialisé :

    Ma dependencyproperty :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     public static readonly DependencyProperty XMLProperty =
                DependencyProperty.Register("XML", typeof (XmlNode), typeof (MainWindow), new PropertyMetadata(default(XmlNode)));
     
            public XmlNode XML
            {
                get { return (XmlNode) GetValue(XMLProperty); }
                set { SetValue(XMLProperty, value); }
            }

    Mon test:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var myXmlDocument = new XmlDocument();
     
    myXmlDocument.Load("USPresidents.xml"); // charge un fichier xml quelconque
     
    var sb = new StringBuilder();
     
    var xmlwriter = XmlWriter.Create(sb);
     
    XML = myXmlDocument;
     
    XamlWriter.Save(this,xmlwriter);

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 163
    Par défaut
    Dans mon cas, je veux sérialiser uniquement le XmlNode correspondant à l'élément sélectionné:
    Code c# : 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
    public class MyTreeView : TreeView
    {
        public MyTreeView()
        {           
            this.SelectedItemChanged += new System.Windows.RoutedPropertyChangedEventHandler<object>(MyTreeView_SelectedItemChanged);
        }
    
        public XmlNode SelectedNode
        {
            get { return (XmlNode)GetValue(SelectedNodeProperty); }
            set { SetValue(SelectedNodeProperty, value); }
        }
    
        // Using a DependencyProperty as the backing store for SelectedNode.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty SelectedNodeProperty =
                DependencyProperty.Register("SelectedNode", typeof(XmlNode), typeof(MyTreeView), new UIPropertyMetadata(null));
            
        void MyTreeView_SelectedItemChanged(object sender, System.Windows.RoutedPropertyChangedEventArgs<object> e)
        {
            this.SelectedNode = e.NewValue as XmlNode;
        }
    }

    Pour sérialiser:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    StringBuilder sb = new StringBuilder();
     
    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Indent = true;
    settings.NewLineOnAttributes = true;
    XmlWriter writer = XmlWriter.Create(sb, settings);
     
    XamlWriter.Save(this.TheTreeView,writer);

    Pour désérialiser:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(sb.ToString());
    MyTreeView test = XamlReader.Load(new XmlNodeReader(doc)) as MyTreeView;

    Le résultat obtenu lors de la sérialisation est le suivant
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <MyTreeView.SelectedNode>
        <sx:XmlElement
          Prefix=""
          IsEmpty="True"
          InnerXml=""
          InnerText=""
          Value="{assembly:Null}" />
    </MyTreeView.SelectedNode>

    Et j'obtient une exception pour désérialiser

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Serialisation]Serialisation / Deserialisation.
    Par neXistPa dans le forum Général Java
    Réponses: 6
    Dernier message: 29/11/2005, 07h52
  2. [Concept][Sérialisation] XML ou serializable
    Par christopheJ dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 03/06/2004, 13h11
  3. est il possible de serialiser un composant visuel ?
    Par uliss dans le forum C++Builder
    Réponses: 12
    Dernier message: 15/04/2004, 10h22
  4. [VB6]Sérialiser un objet
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 11/10/2003, 10h05
  5. Serialiser de gros documents XML
    Par philemon_siclone dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 17/09/2003, 15h26

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