2012-02-29 27 views
19

Tôi đang sử dụng C# và XmlSerializer để tuần tự hóa các lớp sau đây:Serialize một lớp C# để XML với các thuộc tính và một giá trị duy nhất cho lớp

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

    public string Value { get; set; } 
} 

Tôi muốn này để serialize sang định dạng XML sau:

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

Nói cách khác, tôi muốn thuộc tính Giá trị là giá trị của phần tử Tiêu đề trong tệp XML. Tôi dường như không thể tìm thấy bất kỳ cách nào để làm điều này mà không cần thực hiện serializer XML của riêng tôi, mà tôi muốn tránh. Bất kỳ trợ giúp sẽ được đánh giá cao.

Trả lời

37

Hãy thử sử dụng [XmlText]:

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

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

Đây là những gì tôi nhận được (nhưng tôi đã không dành nhiều thời gian tinh chỉnh XmlWriter, vì vậy bạn sẽ có được một loạt các tiếng ồn trong cách không gian tên, v.v.

<?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

Tôi biết có một thứ đơn giản mà tôi đã bỏ lỡ. –

5

XmlTextAttribute có thể?

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; } 
    } 

} 
Các vấn đề liên quan