2015-10-13 18 views
0

我正在使用XmlSerializer進行Object - > Xml序列化。當我的對象內部的字符串屬性爲空或僅包含空格時,串行器僅返回<SomeProperty/>XmlSerializer在序列化爲XML時保留了空格

如何在序列化期間保留空格?

和後續,如果我把多個空格SomeProperty = " ";我想序列化這些,所以<SomeProperty> </SomeProperty>

var xmlSerializer = new XmlSerializer(typeof(T)); 
var xmlWriterSetting = new XmlWriterSettings() 
{ 
    Encoding = System.Text.Encoding.Default, 
    Indent = false, 
    OmitXmlDeclaration = true 
}; 

using (var stringWriter = new StringWriter()) 
using (var xmlWriter = XmlWriter.Create(stringWriter, xmlWriterSetting)) 
{ 
    xmlSerializer.Serialize(xmlWriter, InputObject); 
    return stringWriter.ToString(); 
} 
+2

無法重現。當我使用你的代碼時(使用VS 2015和.NET 4.5.2),我得到空白。你可以發佈類聲明嗎?可能是有差別.. –

+0

@Volkan Paksoy我發現問題,代碼的確能夠正確序列化(正確保留空白),但是在前端,我使用了一個帶默認XSLT的控件(用於微軟)顯示數據 - 該控件無法正確顯示。我應該在開始時檢查調試。感謝您讓我進入調試和檢查! – Iztoksson

回答

1

您可以控制XML本身中的空白處理。所以,你應該寫這樣的特性:

<SomeProperty xml:space="preserve">  </SomeProperty> 

要做到這一點,只需使用作家添加屬性:

xmlWriter.WriteAttributeString("xml", "space", null, "preserve"); 

當你讀到這對XML的支持,空間將被視爲顯著即使您忽略閱讀器配置中的空格,也會返回空格並返回。

+0

與我的問題相關,但是這將用於反序列化 - 雖然非常有用,但會保存這個以備將來使用!謝謝! – Iztoksson

+0

嗯,我看不出這對XmlSerializer有什麼幫助,是嗎? –

+0

@Ivan,Uporabnik003:你可以爲需要特殊處理的類實現'IXmlSerializable'。你有一個'XmlWriter'的WriteXml方法,所以你可以添加屬性。 – taffer

相關問題