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:
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:<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 '...
Dato che preferirei evitare di tenere questa roba nel codice, qualcuno mi può spiegare come mai avvieve questo?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

Rispondi quotando