2011-03-24 95 views
16

當使用默認設置和XmlSerializer時,它將輸出XML作爲格式化值。防止XmlSerializer格式化輸出

IE:沿着這些線。

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfStock xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Stock> 
    <ProductCode>12345</ProductCode> 
    <ProductPrice>10.32</ProductPrice> 
    </Stock> 
    <Stock> 
    <ProductCode>45632</ProductCode> 
    <ProductPrice>5.43</ProductPrice> 
    </Stock> 
</ArrayOfStock> 

如何防止輸出上的任何格式化?所以我期望實現的是這個。

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfStock xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Stock> 
     <ProductCode>123456</ProductCode> 
     <ProductPrice>10.57</ProductPrice> 
    </Stock> 
    <Stock> 
     <ProductCode>789123</ProductCode> 
     <ProductPrice>133.22</ProductPrice> 
    </Stock> 
</ArrayOfStock> 

編輯:我的方法的完整的代碼

public static String Serialize(Stock stock) 
{ 
    XmlSerializer serializer = new XmlSerializer(typeof(Stock)); 

    using (StringWriter stringWriter = new StringWriter()) 
    { 
     serializer.Serialize(stringWriter, stock); 
     return stringWriter.ToString(); 
    }    
} 
+0

爲什麼格式化問題?是否造成問題? – 2011-03-24 04:19:37

回答

22

你有沒有嘗試過這樣的:

var serializer = new XmlSerializer(typeof(MyClass)); 

using (var writer = new StreamWriter("file.path")) 
using (var xmlWriter = XmlWriter.Create(writer, new XmlWriterSettings { Indent = false })) 
{ 
    serializer.Serialize(xmlWriter, myObject); 
} 

XmlWriterSettings還有幾個您可能想要探索的選項。

+0

乾杯,工作的魅力! – 2011-03-24 04:19:26

+2

我覺得縮進默認是錯誤的,因爲我的代碼和你的代碼一樣(沒有設置)並且想要它的格式,所以我必須將縮進改變爲真。 – sluki 2014-09-02 06:49:30

+0

是的,默認縮進在'XmlWritterSettings'上是錯誤的,所以我猜它可以從上面的代碼中省略。但是如果你使用'XmlSerializer'而不明確地給它一個'XmlWriter',它將使用它自己的並且默認啓用格式化/縮進。 – 2016-03-01 05:03:41

0

..

XmlSerializer xmlser = new XmlSerializer(...); 

XmlWriterSettings settings = new XmlWriterSettings {Indent = false}; 

using (XmlWriter xw = XmlWriter.Create(stream, settings)) 
{ 

...

0

解析生成的XML和刪除換行符和製表符是很簡單的......
使用'Indent = false',仍然會將元素放在換行符上嗎?

+0

好吧,看起來縮進選項控制的不僅僅是縮進......可能是嚴重命名的? – 2011-03-24 04:37:35