情境:当我反序列化包含回车符的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
答案 0 :(得分:3)
另一种方法是使用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
我只是在一个示例应用上尝试过,并且在反序列化过程中没有替换换行字符。
答案 1 :(得分:2)
问题可能在于用于新行的两个字符 - 换行符字符和回车符字符。 Windows,UNIX和Mac都使用不同的方式。 XML解析器将新行更改为单个换行符。这适用于所有系统的均匀性。
在反序列化的文本中,换行代码可能会显示为“\ n”。
一种方法是用NewLine替换“\ n”。例如,
DeserializedText = DeserializedText.Replace("\n", Environment.NewLine);
换行代码将显示为“\ r \ n”,这在WinForms文本框中看起来很合理。