2010-01-18 5 views
5

J'essaie de créer un objet C# pour la sérialisation/désérialisation avec une propriété de chaîne. La propriété doit générer un élément et aussi un attribut:Elément de chaîne XML C# avec attribut de nom

par exemple:

... 
<Comment Name="CommentName"></Comment> 
... 

Si la propriété est une chaîne, je ne peux pas voir comment ajouter l'attribut, et si le commentaire est un objet avec les propriétés Nom et Valeur qu'il génère:

... 
<Comment Name="CommentName"> 
    <Value>comment value</Value> 
</Comment> 
... 

Des idées?

Répondre

6

Vous auriez besoin d'exposer ces 2 propriétés sur un type et utiliser l'attribut [XmlText] pour indiquer qu'il ne doit pas générer un élément supplémentaire:

using System; 
using System.Xml.Serialization; 
public class Comment 
{ 
    [XmlAttribute] 
    public string Name { get; set; } 
    [XmlText] 
    public string Value { get; set; } 
} 
public class Customer 
{ 
    public int Id { get; set; } 
    public Comment Comment { get; set; } 
} 
static class Program 
{ 
    static void Main() 
    { 
     Customer cust = new Customer { Id = 1234, 
      Comment = new Comment { Name = "abc", Value = "def"}}; 
     new XmlSerializer(cust.GetType()).Serialize(
      Console.Out, cust); 
    } 
} 

Si vous voulez aplatir ces propriétés sur l'objet lui-même (l'exemple Customer dans mon exemple), vous auriez besoin de code supplémentaire pour que le modèle d'objet prétende s'adapter à ce que veut XmlSerializer, ou un modèle DTO complètement séparé.

Questions connexes