2009-12-01 49 views
2

情況:當我反序列化包含回車符的XML時,字符顯示爲不可打印的字符「框」而不是回車符。XML反序列化回車導致不可打印的字符

背景:通過多行文本框收集的用戶輸入包含文本中的回車符。我使用.NET XML序列化程序(以下片段)將此文本數據保存到XML中。當我稍後反序列化XML數據並將其綁定回多行文本框時,回車符將呈現爲不可打印的「框」。

我知道Windows使用回車+換行來表示換行結束。我認爲XML序列化可能會改變數據(可能會剝離回車?)。

問題:任何想法如何獲得反序列化的回車以正確呈現?

由於提前,-Ed

系列化片段

Public Sub SaveApplicationOptions(ByVal AppOptions As ApplicationOptions) Implements IApplicationOptionsRepository.SaveApplicationOptions 
    Dim serializer As New XmlSerializer(GetType(ApplicationOptions)) 
    Dim ApplicationOptionsFilename As String = ConfigurationManager.AppSettings("ApplicationOptionsXML") 
    Dim sw As New StreamWriter(ApplicationOptionsFilename) 
    serializer.Serialize(sw, AppOptions) 
    sw.Close() 
    sw.Dispose() 
End Sub 

回答

2

另一種方法是使用XmlAttribute(),如here所述。例如:

Imports System.Xml.Serialization 

Public Class ApplicationOptions 

    Private _someText As String = String.Empty 

    <XmlAttribute()> _ 
    Public Property SomeText() As String 
     Get 
      Return _someText 
     End Get 
     Set(ByVal value As String) 
      _someText = value 
     End Set 
    End Property 

End Class 

我剛剛在示例應用程序上嘗試過它,並且在反序列化過程中換行字符未被替換。

+0

+1優秀的答案。這個答案得到它的本質。我選擇的答案僅僅是因爲我的XML將在其他地方使用,並且編碼的換行字符串( )會使其他一些消費者絆倒。乾杯! – 2009-12-01 23:06:14

2

的問題可能是用於新線兩個人物 - 換行字符回車字符。 Windows,UNIX和Mac都使用這些不同的方式。 XML解析器將新行更改爲單個換行符。這適用於所有系統的統一性。

在您的反序列化文本中,換行碼可能會顯示爲「\ n」。

一種方法是用NewLine替換「\ n」。例如,

DeserializedText = DeserializedText.Replace("\n", Environment.NewLine); 

換行代碼將顯示爲「\ r \ n」,這在WinForms文本框中看起來很明智。