Versión Copiada del tfs
This commit is contained in:
65
Extensiones/SerializableDictionary.vb
Normal file
65
Extensiones/SerializableDictionary.vb
Normal file
@@ -0,0 +1,65 @@
|
||||
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
|
||||
Reference in New Issue
Block a user