2012-02-29 8 views
19

estoy usando C# y XmlSerializer para serializar la clase siguiente:Serialice una clase C# para XML con atributos y un único valor para la clase

public class Title 
{ 
    [XmlAttribute("id")] 
    public int Id { get; set; } 

    public string Value { get; set; } 
} 

me gustaría esto a serializar al siguiente formato XML:

<Title id="123">Some Title Value</Title> 

En otras palabras, me gustaría que la propiedad Value sea el valor del elemento Title en el archivo XML. Parece que no puedo encontrar ninguna forma de hacerlo sin implementar mi propio serializador XML, lo cual me gustaría evitar. Cualquier ayuda sería apreciada.

Respuesta

37

Trate de usar [XmlText]:

public class Title 
{ 
    [XmlAttribute("id")] 
    public int Id { get; set; } 

    [XmlText] 
    public string Value { get; set; } 
} 

Aquí es lo que consigo (pero que no pasamos mucho tiempo retocando el XmlWriter, por lo que obtener un montón de ruido en el camino de espacios de nombres, etc .:

<?xml version="1.0" encoding="utf-16"?> 
<Title xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     id="123" 
     >Grand Poobah</Title> 
+0

Sabía que tenía que haber algo simple que me faltaba. Funciona como un encanto, gracias. –

5

XmlTextAttribute probablemente?

using System; 
using System.IO; 
using System.Text; 
using System.Xml.Serialization; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var title = new Title() { Id = 3, Value = "something" }; 
      var serializer = new XmlSerializer(typeof(Title)); 
      var stream = new MemoryStream(); 
      serializer.Serialize(stream, title); 
      stream.Flush(); 
      Console.Write(new string(Encoding.UTF8.GetChars(stream.GetBuffer()))); 
      Console.ReadLine(); 
     } 
    } 

    public class Title 
    { 
     [XmlAttribute("id")] 
     public int Id { get; set; } 
     [XmlText] 
     public string Value { get; set; } 
    } 

} 
Cuestiones relacionadas