2012-07-26 20 views
2

我使用xml序列化來創建我的xml片段。每個序列化都不會在最後創建換行符,導致緊跟標籤之後的開放標記。請參閱下面的示例輸出,在同一行打開標記後跟隨close標記
如何強制將序列化對象置於新行中?如何在xml序列化標記後創建新行

maxmumleewayinticks=Instrument.MasterInstrument.TickSize*2; 

    string filename="c:\\temp\\Strategyxmlfile" + DateTime.Now.Ticks + ".xml"; 
    settings = new XmlWriterSettings(); 
    settings.Indent = true; 
    settings.IndentChars = " "; 
    settings.NewLineChars = "\r\n"; 
    settings.NewLineHandling = NewLineHandling.Replace; 
    settings.OmitXmlDeclaration = true; 
    settings.CloseOutput = false; 
    writer= new StreamWriter(filename); 

    ns.Add("", ""); 
    // write and close the bar 

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

    w =XmlWriter.Create(writer,settings); 

    serializer.Serialize(w, decision,ns); 

輸出:

<DecisionBar EntryOrExit="ENTRY"> 
    <mfe>0.0001</mfe> 
    <mae>-0.0002</mae> 
    <bartime>2012-07-25T21:43:00</bartime> 
    <frequency>1 MINUTES</frequency> 
    <HH7>true</HH7> 
    <crossover>true</crossover> 
    <currentprofitability>0.0001</currentprofitability> 
    <entryPointLong>1.032</entryPointLong> 
    <entryPointShort>1.0308</entryPointShort> 
    <exitStopFull>1.031</exitStopFull> 
    <exitStopPartial>0</exitStopPartial> 
</DecisionBar><DecisionBar> 
    <mfe>0.0001</mfe> 
    <mae>-0.0002</mae> 
    <bartime>2012-07-25T21:44:00</bartime> 
    <frequency>1 MINUTES</frequency> 
    <HH7>false</HH7> 
    <crossover>false</crossover> 
    <currentprofitability>0.0001</currentprofitability> 
    <entryPointLong>0</entryPointLong> 
    <entryPointShort>0</entryPointShort> 
    <exitStopFull>0</exitStopFull> 
    <exitStopPartial>0</exitStopPartial> 
</DecisionBar> 

回答

1

看看here

try 
{ 
    MemberList g = new MemberList("group name"); 
    g.members[0] = new Member("mem 1"); 
    g.members[1] = new Member("mem 2"); 
    g.members[2] = new Member("mem 3"); 

    StringWriter sw = new StringWriter(); 
    XmlTextWriter tw = new XmlTextWriter(sw); 
    tw.Formatting = Formatting.Indented; 
    tw.Indentation = 4; 

    XmlSerializer ser = new XmlSerializer(typeof(MemberList)); 
    ser.Serialize(tw, g); 

    tw.Close(); 
    sw.Close(); 

    Console.WriteLine(sw.ToString()); 
} 
catch(Exception exc) 
{ 
    Console.WriteLine(exc.Message); 
} 

這會給你想要的結果,但它需要一些額外的工作,而不只是指定的一些選項XmlSerializer的。

編輯:有一堆變化。我發現這一個Googling;你也可以做到的。