2012-10-04 30 views
5

我寫了一些.net代碼來使用XMLSerializer類序列化一個對象。序列化.net對象並省略doctype?

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

輸出看起來是這樣的:

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

這是偉大的,但我真的想是讓剛剛根節點沒有在一開始的XML文檔類型聲明。

我想這樣做的原因是因爲我想使用XML序列化對象的根元素作爲另一個XML文檔的一部分。

+0

我要補充一點,我敢肯定,我可以用字符串操作做到這一點,但我希望有可能是一個內置在這樣做的機制。 –

+0

不是一個真正的答案,但你總是可以用str.substring(str.indexof('>')+ 1)。 (我不使用C#所以不確定語法,但你明白了) – OneOfOne

+3

你給我們看的片段根本沒有文檔類型。 – Joey

回答

10

XmlWriterSettings有一個屬性省略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

這正是我所需要的。謝謝! –