65 lines
2.3 KiB
VB.net
65 lines
2.3 KiB
VB.net
Imports System.Collections.Generic
|
|
Imports System.Text
|
|
Imports System.Xml.Serialization
|
|
Namespace Extensiones
|
|
<XmlRoot("dictionary")> _
|
|
Public Class SerializableDictionary(Of TKey, TValue)
|
|
Inherits Dictionary(Of TKey, TValue)
|
|
Implements IXmlSerializable
|
|
#Region "IXmlSerializable Members"
|
|
Public Function GetSchema() As System.Xml.Schema.XmlSchema Implements IXmlSerializable.GetSchema
|
|
Return Nothing
|
|
End Function
|
|
|
|
Public Sub ReadXml(reader As System.Xml.XmlReader) Implements IXmlSerializable.ReadXml
|
|
Dim keySerializer As New XmlSerializer(GetType(TKey))
|
|
Dim valueSerializer As New XmlSerializer(GetType(TValue))
|
|
|
|
Dim wasEmpty As Boolean = reader.IsEmptyElement
|
|
reader.Read()
|
|
|
|
If wasEmpty Then
|
|
Return
|
|
End If
|
|
|
|
While reader.NodeType <> System.Xml.XmlNodeType.EndElement
|
|
reader.ReadStartElement("item")
|
|
|
|
reader.ReadStartElement("key")
|
|
Dim key As TKey = DirectCast(keySerializer.Deserialize(reader), TKey)
|
|
reader.ReadEndElement()
|
|
|
|
reader.ReadStartElement("value")
|
|
Dim value As TValue = DirectCast(valueSerializer.Deserialize(reader), TValue)
|
|
reader.ReadEndElement()
|
|
|
|
Me.Add(key, value)
|
|
|
|
reader.ReadEndElement()
|
|
reader.MoveToContent()
|
|
End While
|
|
reader.ReadEndElement()
|
|
End Sub
|
|
|
|
Public Sub WriteXml(writer As System.Xml.XmlWriter) Implements IXmlSerializable.WriteXml
|
|
Dim keySerializer As New XmlSerializer(GetType(TKey))
|
|
Dim valueSerializer As New XmlSerializer(GetType(TValue))
|
|
|
|
For Each key As TKey In Me.Keys
|
|
writer.WriteStartElement("item")
|
|
|
|
writer.WriteStartElement("key")
|
|
keySerializer.Serialize(writer, key)
|
|
writer.WriteEndElement()
|
|
|
|
writer.WriteStartElement("value")
|
|
Dim value As TValue = Me(key)
|
|
valueSerializer.Serialize(writer, value)
|
|
writer.WriteEndElement()
|
|
|
|
writer.WriteEndElement()
|
|
Next
|
|
End Sub
|
|
#End Region
|
|
End Class
|
|
End Namespace |