XML 설정 파일을 읽고 쓰기 위해 XMLDocument 대신 XmlSerializer를 사용하도록 VB.NET 응용 프로그램을 변경하고 있으며 이전 버전과의 호환성을 유지하고 싶습니다.
다음은 XML 파일 내용의 샘플입니다.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<postHistory>
<postFile>a.txt</postFile>
<postFile>b.txt</postFile>
<postFile>c.txt</postFile>
</postHistory>
</appSettings>
<SettingsPath>d.txt</SettingsPath>
</configuration>
다음은 원본 파일을 올바르게 역 직렬화하는 클래스입니다.
Imports System.Xml.Serialization
Imports System.Collections.Generic
<XmlRoot("configuration")>
Public Class LocalSettings
<XmlElement("appSettings")>
Public appSettings As New postHistory()
Public SettingsPath As String = ""
End Class
Public Class postHistory
Public postHistory As New SubSettings()
End Class
Public Class SubSettings
<XmlElement("postFile")>
Public postHistory As New List(Of String)
End Class
다음은 파일 직렬화 해제에 사용되는 코드입니다.
Public Shared Function GetLocalSettings(ByVal filePath As String) As LocalSettings
Dim lSettings As New LocalSettings()
Try
Dim xs As New XmlSerializer(GetType(LocalSettings))
Using fs As New FileStream(filePath, FileMode.Open)
lSettings = xs.Deserialize(fs)
End Using
Catch ex As Exception
' Handle exception
End Try
Return lSettings
End Function
이 솔루션은 작동하지만 어색합니다. 두 개의 하위 클래스 내에 'postHistory'목록을 중첩 할 필요가없는 역 직렬화하는 더 최적의 방법이 있습니까?
를 사용 XmlArrayAttribute(string name)
하여 지정된 이름을 가진 외부 컨테이너 요소를 사용 하여 목록을 두 수준으로 직렬화하도록 지정할 수 있습니다 . 그런 다음 XmlArrayItemAttribute(string name)
내부 요소 이름을 지정하는 데 사용할 수 있습니다 .
그러므로:
<XmlRoot("configuration")>
Public Class LocalSettings
<XmlElement("appSettings")>
Public appSettings As New postHistory()
Public SettingsPath As String = ""
End Class
Public Class postHistory
<XmlArray("postHistory")>
<XmlArrayItem("postFile")>
Public postHistory As New List(Of String)
End Class
이를 통해 SubSettings
클래스를 제거 할 수 있습니다.
샘플 바이올린 .
자세한 내용은 속성을 사용하여 XML 직렬화 제어를 참조하십시오 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다