2009-09-09 55 views
1

我正在使用的文件格式(OFX)類似於XML,並且在類XML位開始之前包含一堆純文本內容。它不喜歡在純文本和XML部分之間,所以我想知道是否有辦法讓XmlSerialiser忽略它。我知道我可以通過這個文件並清除那條線,但是不要把它寫在第一位就更簡單和更清潔!有任何想法嗎?如何讓XmlSerialiser不以<?xml ?>開頭?

回答

4

不是太強悍,你只需要序列化到一個明確聲明的XmlWriter,並在序列化之前在該writer上設置選項。

public static string SerializeExplicit(SomeObject obj) 
{  
    XmlWriterSettings settings; 
    settings = new XmlWriterSettings(); 
    settings.OmitXmlDeclaration = true; 

    XmlSerializerNamespaces ns; 
    ns = new XmlSerializerNamespaces(); 
    ns.Add("", ""); 


    XmlSerializer serializer; 
    serializer = new XmlSerializer(typeof(SomeObject)); 

    //Or, you can pass a stream in to this function and serialize to it. 
    // or a file, or whatever - this just returns the string for demo purposes. 
    StringBuilder sb = new StringBuilder(); 
    using(var xwriter = XmlWriter.Create(sb, settings)) 
    { 

     serializer.Serialize(xwriter, obj, ns); 
     return sb.ToString(); 
    } 
} 
6

您必須在調用Serialize方法時操作您使用的XML編寫器對象。其Settings屬性有一個OmitXmlDeclaration屬性,您希望將其設置爲true。您還需要設置ConformanceLevel屬性,否則XmlWriter將忽略OmitXmlDeclaration屬性。

XmlWriterSettings settings = new XmlWriterSettings(); 
settings.OmitXmlDeclaration = true; 
settings.ConformanceLevel = ConformanceLevel.Fragment; 
XmlWriter writer = XmlWriter.Create(/*whatever stream you need*/,settings); 
serializer.Serialize(writer,objectToSerialize); 
writer.close(); 
+0

道歉;事實證明ConformanceLevel部分使得serializer.Serialize拋出異常。所以我已經推出了'接受'從你下面! :)當然,你仍然會得到讚賞,並且'謝謝你'! – 2009-09-09 14:03:18

相關問題