2010-05-27 5 views
1

Compte tenu du XML exemple tels que:C# sérialisation XML uniquement serialise seul élément dans la liste

<XML> 
    <EMPLOYEES>  
    <EMPLOYEE isBestEmployee="false">John"<"/EMPLOYEE> 
    <EMPLOYEE isBestEmployee="true">Joe"<"/EMPLOYEE> 
    <EMPLOYEE isBestEmployee="false">Bill"<"/EMPLOYEE> 
    </EMPLOYEES> 
</XML> 

Comment puis-je serialise que l'employé isBestEmployee="true" à un seul objet employé?

+0

Si vous publiez code ou XML, ** S'il vous plaît ** mettre en évidence les lignes dans l'éditeur de texte et cliquez sur le bouton « code » (101 010) sur la barre d'outils de l'éditeur pour mettre en forme bien et la syntaxe mettre en évidence! –

+0

Avez-vous déjà résolu ce problème avec succès? Avez-vous encore besoin d'aide pour cela? – jcolebrand

Répondre

1

J'ai deux réponses à cette question, voici la deuxième réponse:

Compte tenu de toute liste, comment voulez-vous trouver une valeur spécifique?

Vous avez juste à analyser la liste.


Maintenant, je suppose que vous n'êtes pas sûr comment faire:

[XmlType("EMPLOYEES"), Serializable] 
public class Employees { 
    public Employee[] employee {get; set;} 
} 
[XmlType("EMPLOYEE")] 
public class Employee { 
    [XmlAttribute("isBestEmployee")] 
    public bool bestEmployee {get; set;} 
    [XmlText] 
    public string name; 
} 

Vous devez désérialiser ce (probablement avec XmlSerializer) et vous pouvez analyser le tableau en utilisant foreach (Employee in Employees) ou Requête LINQ ou l'un de plusieurs autres moyens.

Est-ce que cela répond à la question?

+0

Merci. Votre 2ème solution nécessite encore que je sérialise toutes les données dans la liste, puis extraire le "meilleur employé". Existe-t-il un moyen d'utiliser XPath pour sérialiser des objets? – guazz

+0

@guazz - essayez de lire le premier lien de la solution. la seconde était juste sur la façon de déclarer les classes. – jcolebrand

0

Faites-vous référence à quelque chose comme ceci (peut-être que linq fait le levage lourd)?

XDocument loaded = XDocument.Load(@"C:\YourXmlFile.xml"); //or xml in memory 

     // Query the data and create the employee objects 
     var q = from c in loaded.Descendants("EMPLOYEE") 
       where (bool)c.Attribute("isBestEmployee") == true //"true" 
       select new Employee() { Name = c.Value, isBestEmployee = (bool)c.Attribute("isBestEmployee") }; 


     //print out the list of employees if you want. 
     foreach (Employee e in q) 
     { 
      Console.WriteLine("Employee name = {0}, isBestEmployee = {1}", e.Name, e.isBestEmployee); 
     } 
+0

Le XPath est encore moins de code ... – jcolebrand

+1

Vrai l'exemple a moins de code, mais comme @guazz dit qu'il doit encore boucler pour créer les employés. Avec votre exmaple il devrait créer une liste/collection de somekind et ajouter le (s) nouvel (x) employé (s) dans la boucle pour qu'il puisse finalement faire quelque chose avec des objets réels ... alors ce ne serait pas moins de code. D'une manière ou d'une autre, il n'y a pas beaucoup de travail à faire ... juste en offrant des options. – AGoodDisplayName

+0

~ Bons points. Ce à quoi je me bouscule, c'est à quoi ressemble la logique d'entreprise qui dit: «Je n'aurai jamais besoin de l'information sur l'EMPLOYÉ sans savoir qui est le meilleur employé. et pourquoi le foncteur alimentant cet ensemble de données ne peut pas se limiter à la logique métier d'origine. Il y a une raison pour laquelle les données sont fournies. D'où j'ai fourni deux solutions. Un à faire ce qu'il a demandé (que je pense qu'il n'a pas lu, puisqu'il a encore posé des questions sur xpaths) et un à faire ce que les données affichées montraient seraient plus tard possibles. IDK, aucune exigence présentée, ouais? – jcolebrand