2009-12-01 2 views
2

상황 : : 캐리지 리턴이 포함 된 XML을 deserialize 할 때 문자는 캐리지 리턴이 아닌 인쇄 할 수없는 문자 "상자"로 나타납니다.XML 캐리지 리턴의 비 직렬화로 인해 인쇄 할 수없는 문자가 발생합니다.

배경 : 여러 줄 입력란을 통해 수집 된 사용자 입력에는 텍스트 내의 캐리지 리턴이 포함됩니다. .NET XML serializer (아래의 스 니펫)를 사용하여이 텍스트 데이터를 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

here과 같이 XmlAttribute()를 사용하는 것도 한 가지 방법입니다. 예를 들어 :

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이 다른 곳에서 사용될 것이고 인코딩 된 라인 피드 문자열 ( )이 다른 일부 소비자를 떠 넘길 것이기 때문에 선택한 대답만을 선택했습니다. 건배! –

2

문제는 새로운 라인에 사용되는 두 개의 문자에있을 수 있습니다 - 라인 피드 문자와 캐리지 리턴 캐릭터. Windows, UNIX 및 Mac 모두 다르게 사용합니다. XML 파서는 새 줄을 한 줄 넘김 문자로 변경합니다. 이는 모든 시스템에 균일 성을 적용 할 때 적용됩니다.

역 직렬화 된 텍스트에서 줄 바꿈 코드는 "\ n"으로 표시됩니다.

한 가지 방법은 "\ n"을 NewLine으로 대체하는 것입니다. 예를 들어,

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

줄 바꿈 코드는 "\ r \ n"으로 나타나며 WinForms 텍스트 상자에서 의미가 있습니다.

관련 문제