XML反序列化回车导致不可打印的字符

时间:2009-12-01 16:56:27

标签: .net winforms xml-serialization

情境:当我反序列化包含回车符的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 个答案:

答案 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文本框中看起来很合理。