2011-06-17 26 views
9

Tenemos el código followig:Cambiar nombre XmlElement para la serialización XML

[Serializable] 
public class Class1 
{ 
    [XmlElement("description")] 
    public string Description { get; set; } 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 
     var list = new List<Class1> {new Class1() {Description = "Desc1"}, new Class1() {Description = "Desc2"}}; 
     var serializer = new XmlSerializer(typeof(List<Class1>), new XmlRootAttribute("root")); 
     var ms = new MemoryStream(); 
     serializer.Serialize(ms, list); 
     ms.Position = 0; 
     var result = new StreamReader(ms).ReadToEnd(); 
    } 
} 

después de la ejecución tendremos lo siguiente en 'resultado' variables:

<?xml version="1.0"?> 
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Class1> 
    <description>Desc1</description> 
    </Class1> 
    <Class1> 
    <description>Desc2</description> 
    </Class1> 
</root> 

La pregunta es: ¿cómo cambiar xml nombre de elementos de 'Clase 1' a 'Artículo 1' sin cambiar el nombre de clase?

Respuesta

30

Puede usar XmlTypeAttribute.TypeName para esto.

Prueba esto para usted Class1 definición

[XmlType(TypeName = "Item1")] 
    [Serializable] 
    public class Class1 
    { 
     [XmlElement("description")] 
     public string Description { get; set; } 
    } 
+0

Gracias. Esto está funcionando – Anubis

4

Utilice un XmlTypeAttribute en la clase, así:

[XmlType(TypeName="ElementName")] 
[Serializable] 
public class Class1 { ... 

EDITAR: Actualización XmlRootAttribute-XmlTypeAttribute. El primero funciona donde el tipo que se pasa al serializador es el tipo atribuido (Class1 aquí), pero no cuando hay un tipo de ajuste (List<Class1> aquí). XmlType que las obras no se desprende de la documentación (el subrayado es mío):

Controla el esquema XML que se genera cuando el objetivo atributo es serializado por el XmlSerializer.

Crédito para Bala R's answer.

+0

No creo XmlElementAttribute se puede aplicar para classes.' [AttributeUsageAttribute (AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue, allowMultiple = true)] public class XmlElementAttribute: Attribute' y no hay 'AttributeTargets.Class' –

+0

The System.Xml.Serialization.XmlElementAttribute tiene AttributeUsage: Campo | Parámetro | Propiedad | ReturnValue pero no el tipo – Anubis

+0

@BetaR: Oops ... atributo incorrecto. – Richard

Cuestiones relacionadas