2009-03-28 6 views
1

Si jeComment avoir un attribut sur un élément de type chaîne

[XmlElement(ElementName = "Title")] 
public string Title; 

Comment puis-je inclure un attribut dans le titre sans déclarer une classe (son type est juste une chaîne) ?? de telle sorte que quand je sérialiser en utilisant XML sérialiseur, la sortie est quelque chose comme ceci:

<Movie> 
    <Title x:uid="movie_001">Armagedon</Title> 
    <Date>010101</Date> 
<Movie> 

et non comme ceci:

<Movie> 
    <Title x:uid="movie_001" MovieTile="Armagedon"\> 
    <Date>010101</Date> 
<Movie> 

Répondre

1

Je ne pense pas que cela est possible sans avoir le titre soit une coutume tapez ou implémentez explicitement des méthodes de sérialisation.

Vous pouvez faire une classe personnalisée comme si ..

class MovieTitle 
{ 
    [XmlText] 
    public string Title { get; set; } 
    [XmlAttribute(Namespace="http://www.myxmlnamespace.com")] 
    public string uid { get; set; } 
    public override ToString() { return Title; } 
} 

[XmlElement(ElementName = "Title")] 
public MovieTitle Title; 

qui devrait produire:

<Title x:uid="movie_001">Armagedon</Title> 

Bien que le sérialiseur peut faire des choses intéressantes avec des espaces de noms inconnus.

Vous pouvez éviter le comportement wierd en déclarant vos espaces de noms et de fournir l'objet au sérialiseur ..

XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 
    ns.Add("x", "http://www.myxmlnamespace.com"); 
Questions connexes