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?