2012-10-04 25 views
5

Tôi đã viết một số mã .net để tuần tự hóa một đối tượng bằng cách sử dụng lớp XMLSerializer.Serialize đối tượng .net và bỏ qua tài liệu?

public static string serialize(object o) 
    { 
      Type type = o.GetType(); 
      System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(type);     
      System.IO.StringWriter writer = new System.IO.StringWriter(); 
      serializer.Serialize(writer, o);     
      return writer.ToString();   
    } 

Kết quả trông như thế này:

<?xml version="1.0" encoding="utf-16"?> 
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <string>a</string> 
    <string>b</string> 
    <string>c</string> 
</ArrayOfString> 

Đó là tuyệt vời, nhưng những gì tôi thực sự muốn là để có được chỉ là nút gốc mà không cần khai báo DOCTYPE XML lúc đầu.

Lý do tôi muốn làm điều này là vì tôi muốn sử dụng phần tử gốc của đối tượng được tuần tự hóa XML như một phần của tài liệu XML khác.

+0

tôi nên thêm rằng tôi chắc chắn rằng tôi có thể làm điều này với thao tác chuỗi, nhưng tôi đã hy vọng có thể có một built- trong cơ chế để làm điều này. –

+0

Không thực sự là một câu trả lời, nhưng bạn luôn có thể đi với một cái gì đó như str.substring (str.indexof ('>') + 1). (Tôi không sử dụng C# vì vậy không chắc chắn về cú pháp nhưng bạn có ý tưởng) – OneOfOne

+3

Đoạn trích bạn đã cho chúng tôi thấy không có loại tài liệu nào cả. – Joey

Trả lời

10

XmlWriterSettings có một tài sản để bỏ qua các khai báo XML (OmitXmlDeclaration):

public static string Serialize(object obj) 
{ 
    var builder = new StringBuilder(); 
    var xmlSerializer = new XmlSerializer(obj.GetType()); 
    using (XmlWriter writer = XmlWriter.Create(builder, 
     new XmlWriterSettings() { OmitXmlDeclaration = true })) 
    { 
     xmlSerializer.Serialize(writer, obj); 
    } 
    return builder.ToString(); 
} 
+0

Đó chính xác là những gì tôi cần. Cảm ơn! –

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