Ho un namespace nel quale sono definite alcune classi, in particolare MediaFile e MediaCategory. Ogni MediaFile contiene un campo privato esposto tramite proprietà pubblica di tipo MediaCategory. Ogni MediaCategory contiene a sua volta un campo privato, sempre esposto come proprietà pubblica, MediaFileCollection. Allo stesso modo della TreeView e dei suoi nodi, questi elementi si puntano vicendevolmente, poichè ciascuna categoria contiene i propri file e ogni file un rimando a quella categoria. Questo non è un problema, e anzi, mi è utile così. Tuttavia, quando devo serializzare un MediaFile, viene lanciato un errore di riferimento circolare dal serializzatore. Senza indugio ho impostato il campo come <NonSerialized()> per evitare questa eccezione:
codice:
    <Serializable()> _
    Public Class MediaFile
        Private _Name, _Author, _Artist, _Band As String
        Private _Genre, _Notes, _FileName As String
        <NonSerialized()> _
        Private _Category As MediaCategory
        Private _Date As Date
        Private _IsVideo As Boolean
'...
Nonostante ciò, il serializzatore continua lo stesso a tentare la serializzazione di Category e a dare lo stesso identico errore, anche se esplicitamente ho impedito l'operazione. Per ora ho risolto con un trucchetto:
codice:
Public Sub Save()
   Dim Serializer As New XmlSerializer(Me.GetType)
   Dim File As New IO.FileStream(Me.FullPath, IO.FileMode.Create)
   Dim Temp As MediaCategory = Me.Category
   _Category = Nothing
   Serializer.Serialize(File, Me)
   Me.Category = Temp
   File.Close()
End Sub
Dato che preferirei evitare di tenere questa roba nel codice, qualcuno mi può spiegare come mai avvieve questo?