Come posso ottenere v2 di protobuf-net per ignorare il fatto che la mia classe implementa ICollection, IEnumerable, etc?Forza protobuf-net per ignorare le interfacce IEnumerable/ICollection
Per questo particolare scenario, desidero solo che i campi contrassegnati come [ProtoMember] siano serializzati.
Attualmente sono in fase di conversione dall'utilizzo di protobuf-net v1 all'utilizzo di v2. Ho una struttura particolare che ora sta serializzando in modo errato a causa del cambiamento. Sembra qualcosa di simile al seguente:
[ProtoContract]
public class FileTree : ICollection<FilePath>, IEnumerable<FilePath>, IEnumerable, INotifyCollectionChanged, INotifyPropertyChanged {
private FileTreeNode _Root;
[ProtoMember (1)]
public FileTreeNode Root {
get { return _Root; }
set { _Root = value; }
}
}
La classe FileTree è stato scritto a crollare i percorsi dei file come "C: \ happy.txt" "C: \ history.txt" in qualcosa di più simile
"C:\h"
└─── "appy.txt"
└─── "istory.txt"
La struttura elimina la ridondanza nelle stringhe del percorso. Quindi, davvero non voglio che la classe FileTree sia serializzata tramite le funzioni IEnumerable perché in questo modo viene memorizzata come "C: \ happy.txt", "C: \ history.txt", ecc. In questo momento, nella serializzazione di un oggetto FileTree, ogni percorso viene stampato completamente.
EDIT: Un'ultima cosa vorrei ricordare - ho una funzione On_Deserialization in FileTree che viene etichettato con [ProtoAfterDeserialization]. Inserisco un punto di interruzione nella funzione, ma non viene colpito. Questo è legato al modo in cui questa classe viene serializzata?
Non sono * consapevole * che si è trattato di un cambio di interruzione tra v1 e v2; forse la sottile differenza è che v1 cercava di più per 'IList', o una combinazione di 'IEnumerable ' ** con ** un pubblico 'Aggiungi'. –