2009-05-05 6 views
1

Disons que je le fichier XML suivant:Comment sérialisation XML à la collecte générique lorsque l'espace de noms est spécifié

<?xml version="1.0" encoding="utf-8"?> 
<Customers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Customer.xsd"> 
    <Customer> 
     <FirstName></FirstName> 
     <LastName></LastName> 
    </Customer> 
    <Customer> 
     <FirstName></FirstName> 
     <LastName></LastName> 
    </Customer> 
    <Customer> 
     <FirstName></FirstName> 
     <LastName></LastName> 
    </Customer> 
</Customer> 

J'ai également créé un objet client qui mappe les champs appropriés.

Maintenant, si j'essaie de sérialiser une liste générique en tant que telle:

XmlSerializer xml = new XmlSerializer(typeof(List<Customer>)); 

Je vais une exception, parce que ma liste ne sont pas mis en correspondance avec le même espace que les clients dans le doc XML, et je ne peux pas l'ajouter en tant qu'attribut car j'utilise une liste générique, pas une collection personnalisée

Comment puis-je demander au sérialiseur de faire correspondre l'espace de noms à la liste sans créer de collection personnalisée?

Edit: Je élaborer un peu, à l'exception lancée par le sérialiseur est:

(clients xmlns = ''> n'a pas été prévu

maintenant parce que je suis à l'aide d'une liste (T.) en tant que nœud parent, comment puis-je correspondre à la liste générique à l'espace de noms spécifié dans le document XML?

+0

est le fait que la balise de fermeture est et non une faute de frappe? –

+0

Yeh typo de ma part, désolé – mwjackson

Répondre

1

Je pense que l'erreur a à voir avec les <clients> nœud non xmlns.

Essayez

XmlRootAttribute xr = new XmlRootAttribute("Customers"); 
XmlSerializer xs = new XmlSerializer(typeof(List<Customer>), xr); 

Par défaut, il s'attendrait un <ArrayOfCustomer> noeud

+0

Parfait, merci! – mwjackson

Questions connexes