
Grandioso!
Ecco il mio contributo per i piu` arretrati, come me, la versione vb della seconda tecnica:
Imports System
Imports System.Xml
Imports System.Xml.Schema
Imports System.Xml.Serialization
Imports System.Collections.Generic
<Serializable()> _
Public Class SerializableDictionary(Of TKey, TValue)
Inherits Dictionary(Of TKey, TValue)
Implements IXmlSerializable
' Fields
Private Const NS As String = ""
Private Const XML_ITEM_NODE_NAME As String = "item"
Private Const XML_KEY_NODE_NAME As String = "key"
Private Const XML_VALUE_NODE_NAME As String = "value"
' Methods
Public Function GetSchema() As XmlSchema Implements IXmlSerializable.GetSchema
Return Nothing
End Function
Public Sub ReadXml(ByVal reader As XmlReader) Implements IXmlSerializable.ReadXml
Dim ks As New XmlSerializer(GetType(TKey))
Dim vs As New XmlSerializer(GetType(TValue))
Dim wasEmpty As Boolean = reader.IsEmptyElement
reader.Read()
If Not wasEmpty Then
Do While (reader.NodeType <> XmlNodeType.EndElement)
reader.ReadStartElement("item", "")
reader.ReadStartElement("key", "")
Dim key As TKey = DirectCast(ks.Deserialize(reader), TKey)
reader.ReadEndElement()
reader.ReadStartElement("value", "")
Dim value As TValue = DirectCast(vs.Deserialize(reader), TValue)
reader.ReadEndElement()
MyBase.Add(key, value)
reader.ReadEndElement()
reader.MoveToContent()
Loop
reader.ReadEndElement()
End If
End Sub
Public Sub WriteXml(ByVal writer As XmlWriter) Implements IXmlSerializable.WriteXml
Dim ks As New XmlSerializer(GetType(TKey))
Dim vs As New XmlSerializer(GetType(TValue))
Dim key As TKey
For Each key In MyBase.Keys
writer.WriteStartElement("item", "")
writer.WriteStartElement("key", "")
ks.Serialize(writer, key)
writer.WriteEndElement()
writer.WriteStartElement("value", "")
Dim value As TValue = MyBase.Item(key)
vs.Serialize(writer, value)
writer.WriteEndElement()
writer.WriteEndElement()
Next
End Sub
End Class
Ciao, alla prossima
Vanni