2009-02-10 6 views
3

Donc je travaille avec des fichiers XML qui, je crois, sont très probablement mal formés, et j'essaie de comprendre comment et si je peux utiliser XmlSerializer pour désérialiser ce XML dans une logique objet métier. Disons que j'ai le fichier XML suivant:Deserialization XML et Loose Array Items

<Root> 
    <ArrayType1 Name="Bob"/> 
    <ArrayType1 Name="Jim"/> 
    <ArrayType2 Name="Frank"> 
     <SubItem Value="4"/> 
    </ArrayType2> 
    <ArrayType2 Name="Jimbo"> 
     <SubItem Value="2"/> 
    </ArrayType2> 
</Root> 

Maintenant, j'aimerais créer une classe qui a ces trois types, Racine, ArrayType1 et ArrayType2, mais je voudrais obtenir deux listes dans la racine, un contenant une collection d'éléments ArrayType1, et un contenant une collection d'éléments ArrayType2, mais il semble que ces articles doivent avoir une sorte de racine, par exemple, je sais comment désérialiser ce qui suit très bien:

<Root> 
    <ArrayType1Collection> 
     <ArrayType1 Name="Bob"/> 
     <ArrayType1 Name="Jim"/> 
    </ArrayType1Collection> 
    <ArrayType2Collection> 
     <ArrayType2 Name="Frank"> 
     <SubItem Value="4"/> 
     </ArrayType2> 
     <ArrayType2 Name="Jimbo"> 
     <SubItem Value="2"/> 
     </ArrayType2> 
    </ArrayType2Collection> 
</Root> 

Mais comment désérialiser cela sans les éléments parents ArrayType # Collection entourant les éléments ArrayType #?

Est-ce que le sérialiseur XML peut même le permettre?

Répondre

11

est-ce pas seulement:

[Serializable] 
public class Root { 
    [XmlElement("ArrayType1")] 
    public List<ArrayType1> ArrayType1 {get;set;} 

    [XmlElement("ArrayType2")] 
    public List<ArrayType2> ArrayType2 {get;set;} 
} 

?

Sinon, il suffit de mettre le fichier XML dans un fichier ("foo.xml") et de l'utilisation:

xsd foo.xml 
xsd foo.xsd /classes 

et regarder les foo.cs générés

+0

... Merci encore trop compliquer. :) –

+0

Les XmlElements sont-ils supposés lire, par exemple, 'ArrayType1' ou' ArrayType1Collection'? –

+0

@Dan semble bien comme écrit; quelle est votre préoccupation? Peut-être que je peux aider ... –