Qualche giorno fa ho parlato del CompactFormatter, una class library che aggiunge la serializzazione binaria al .NET Compact Framework. In questo momento lo sto utilizzando per un progetto ed ho riscontrato un problema: se tento di serializzare una classe ereditata, i campi della classe base non vengono serializzati. Facendo un'esecuzione passo-passo, si scopre che il problema risiede nella seguente riga di codice, contenuta nel file ClassInspector.cs:
FieldInfo[] array = type.GetFields(BindingFlags.Public| BindingFlags.NonPublic |
BindingFlags.Instance|BindingFlags.DeclaredOnly);
Il metodo
Type.GetFields, utilizzato per recuperare i campi della classe che si sta serializzando, è richiamato con il flag
BindingFlags.DeclaredOnly che, come riporta
MSDN,
search only the fields declared on the Type, not fields that were simply inherited. Di conseguenza, per ottenere una serializzazione di tutti i membri della classe, compresi quelli ereditati, è sufficiente eliminare questo tag, in modo che l'istruzione sopra riportata diventi:
FieldInfo[] array = type.GetFields(BindingFlags.Public| BindingFlags.NonPublic |
BindingFlags.Instance);