2008-11-24 6 views
10

Est-il possible d'éviter les balises de propriété de liste lors de la sérialisation?Comment supprimer une balise XML pour la propriété de liste

//[Serializable()] - removed, unnecessary 
public class Foo 
{ 
    protected List<FooBar> fooBars = new List<FooBar>(); 
    public virtual List<FooBar> FooBars 
    { 
     get { return fooBars; } 
     set { fooBars = value; } 
    } 
} 

// [Serializable()] - removed, unnecessary 
public class FooBar 
{ 
    public int MyProperty 
    { get; set; } 
} 

sérialisation Foo donne (sauf le commentaire):

<Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <FooBars> <!-- Unwanted tag --> 
    <FooBar> 
     <MyProperty>7</MyProperty> 
    </FooBar> 
    <FooBar> 
     <MyProperty>9</MyProperty> 
    </FooBar> 
    </FooBars> 
</Foo> 

sortie Recherché:

<Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <FooBar> 
    <MyProperty>7</MyProperty> 
    </FooBar> 
    <FooBar> 
    <MyProperty>9</MyProperty> 
    </FooBar> 

+0

[Serializable] n'a rien à voir avec la sérialisation XML. – Cheeso

Répondre

12

Ajout:

[System.Xml.Serialization.XmlElement("FooBar")] 
public virtual List<FooBar> FooBars 
{ 
    get { return fooBars; } 
    set { fooBars = value; } 
} 

Résultats dans

<FooMain xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:/ 
/www.w3.org/2001/XMLSchema"> 
    <FooBar> 
    <MyProperty>7</MyProperty> 
    </FooBar> 
    <FooBar> 
    <MyProperty>76</MyProperty> 
    </FooBar> 
    <FooBar> 
    <MyProperty>67</MyProperty> 
    </FooBar> 
</FooMain>