2008-11-24 26 views
22

Có cách nào để de/serialize một đối tượng mà không có vòng xâu chuỗi XmlDocument/temp không? Tôi đang tìm kiếm một cái gì đó như sau:De/Serialize trực tiếp đến/từ XML LINQ

class Program 
{ 
    static void Main(string[] args) 
    { 
     XDocument doc = new XDocument(); 
     MyClass c = new MyClass(); 
     c.SomeValue = "bar"; 

     doc.Add(c); 

     Console.Write(doc.ToString()); 
     Console.ReadLine(); 
    } 
} 

[XmlRoot(ElementName="test")] 
public class MyClass 
{ 
    [XmlElement(ElementName = "someValue")] 
    public string SomeValue { get; set; } 
} 

tôi nhận được một thông báo lỗi khi tôi làm điều đó mặc dù (nhân vật không gian không trắng không thể được thêm vào nội dung.) Nếu tôi quấn lớp trong phần tử tôi thấy rằng nội dung được viết là < phần tử > ConsoleApplication17.MyClass </element > - do đó, lỗi có ý nghĩa.

I do có các phương pháp mở rộng để tự động hóa/tuần tự hóa, nhưng đó không phải là những gì tôi đang tìm kiếm (đây là phía máy khách, nhưng tôi vẫn thích thứ gì đó tối ưu hơn).

Bất kỳ ý tưởng nào?

Trả lời

34

Giống như this?

public XDocument Serialize<T>(T source) 
    { 
     XDocument target = new XDocument(); 
     XmlSerializer s = new XmlSerializer(typeof(T)); 
     System.Xml.XmlWriter writer = target.CreateWriter(); 
     s.Serialize(writer, source); 
     writer.Close(); 
     return target; 
    } 

    public void Test1() 
    { 
     MyClass c = new MyClass() { SomeValue = "bar" }; 
     XDocument doc = Serialize<MyClass>(c); 
     Console.WriteLine(doc.ToString()); 
    } 
Các vấn đề liên quan