Xml Sérialisation avec 2 préfixes et 2 namespaces differents

Résolu
cs_veridik Messages postés 13 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 24 juillet 2013 - 8 janv. 2009 à 16:07
cs_veridik Messages postés 13 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 24 juillet 2013 - 9 janv. 2009 à 16:38
<hr />
Bonjour,

Je sérialise des objets métiers avec 2 préfixes et 2 espaces de nommage differents.
J'y arrive mais le problème se situe au niveau de la déclaration des espaces de nommage dans mon xml.

Ci dessous mon fichier xml sérialisé :

<?xml version="1.0"?>

 
    Advanced .NET

   
   
      Florian

      Biquet

   

 

Mais je voudrais que mon namespace2 soit dans la balise qui contient des prefix2, exemple ci-dessous :

<?xml version="1.0"?>

 
    Advanced .NET

   
    www.namespace2.com">
      Florian

      Biquet

   

 

1) Est ce que cela est possible ?

2) Si c'est possible comment spéficier ce formalisme dans mon code.

Merci,

Ci dessous mon code :




// Book1










BookClass

.


Book

book1 =


new





BookClass

.


Book

();



BookClass

.


Price

price1 =


new





BookClass

.


Price

();



AutorClass

.


Autor

autor1 =


new





AutorClass

.


Autor

();price1.currency =



"USD"

;
price1.price = 49.99M;


// M suffix for decimal literals


book1.Title =


"Advanced .NET"

;
book1.price = price1;
autor1.FirstName =


"Florian"

;
autor1.Lastname =


"Biquet"

;
book1.autor = autor1;



// Add books to collection








BookClass

.


Books

books =


new





BookClass

.


Books

();
books.alBooks.Add(book1);



/* Create XML namespace pairs */








XmlSerializerNamespaces

namespaces =


new





XmlSerializerNamespaces

();
namespaces.Add(


"prefix1"

,


"www.namespace1.com"

);
namespaces.Add(


"prefix2"

,


"www.namespace2.com"

);



/* Serialize to file */








Stream

stream =


new





FileStream

(


@"c:\Namespaces.xml"

,


FileMode

.Create,


FileAccess

.Write,


FileShare

.Write);



XmlSerializer

serializer =


new





XmlSerializer

(


typeof

(


BookClass

.


Books

));
serializer.Serialize(stream, books, namespaces);
stream.Close();Ma classe livre :

[



Serializable

]
[System.Xml.Serialization.


XmlRoot

(ElementName =


"Livre"

)]



public





class





BookClass


{



public





class





Price


{



// Serialize the currency field as an attribute with the given namspace


[System.Xml.Serialization.


XmlAttribute

(Namespace =



www.namespace1.com


)]



public





string

currency;



// Serialize the price field as an attribute with the given namspace


[System.Xml.Serialization.


XmlAttribute

(Namespace =



www.namespace1.com


)]



public





decimal

price;
}



public





class





Book


{



// Serialize the title field as an element with the given namspace


[System.Xml.Serialization.


XmlElement

(Namespace =



www.namespace1.com


)]



public





string

Title;



// Serialize the price field as an element with the given namspace


[System.Xml.Serialization.


XmlElement

(Namespace =



www.namespace1.com


)]



public





Price

price;



// Serialize the price field as an element with the given namspace


[System.Xml.Serialization.


XmlElement

(Namespace =



www.namespace1.com


)]



public





AutorClass

.


Autor

autor;}



public





class





Books


{



// Serilize the alBooks filed with the given namespace


[System.Xml.Serialization.


XmlElement

(


typeof

(


Book

), Namespace =



www.namespace1.com


)]



public





ArrayList

alBooks =


new





ArrayList

();
}

}

Ma Classe Auteur :

[

Serializable]
[System.Xml.Serialization.
XmlRoot(ElementName =
"Autor",Namespace=
www.namespace2.com)]

public
class
AutorClass
{

public
class
Autor
{

// Serialize the title field as an element with the given namspace
[System.Xml.Serialization.
XmlElement(Namespace =
www.namespace2.com)]

public
string FirstName;

// Serialize the price field as an element with the given namspace
[System.Xml.Serialization.
XmlElement(Namespace =
www.namespace2.com)]

public
string Lastname;}
}

 

 

1 réponse

cs_veridik Messages postés 13 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 24 juillet 2013
9 janv. 2009 à 16:38
J'ai trouvé la solution à mon problème :

Il suffit de déclarer mon deuxieme namespace dans la classe concerné.

Exemple dans ma classe autor, j'ai ajouté :

[

XmlNamespaceDeclarations]

public
XmlSerializerNamespaces namespaces;

public Autor()
{
       namespaces=
new
XmlSerializerNamespaces();
       namespaces.Add(
"prefix2",
www.namespace2.com);
}
Voici le xml généré :

<?xml version="1.0"?>

 
    Advanced .NET

   
    www.namespace2.com">
      Florian

      Biquet

   

 
3
Rejoignez-nous