2010-01-18 20 views
5

Estoy intentando crear un objeto C# para la serialización/deserialización con una propiedad de cadena. la propiedad necesita para generar un elemento y también tienen un atributo:C# Elemento de cadena XML con el atributo de nombre

por ejemplo:

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

Si la propiedad es una cadena, no puedo ver cómo añadir el atributo, y si el comentario es un objeto con nombre y propiedades de valor que genera:

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

¿Alguna idea?

Respuesta

6

Usted tendría que exponer a los 2 establecimientos en un tipo y utilizar el atributo [XmlText] para indicar que no debe generar un elemento adicional:

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 desea para aplanar las propiedades sobre el objeto en sí (la instancia Customer en mi ejemplo), necesitaría código adicional para hacer que el modelo de objeto pretenda ajustarse a lo que XmlSerializer desea, o un modelo de DTO completamente separado.

Cuestiones relacionadas