Non si può dire al selettore di classe predefinito di ignorare qualcosa, no.
jsonpickle
fa sostegno delle pickle
module__getstate__
e __setstate__
metodi. Se le tue classi implementano questi due metodi, qualsiasi cosa viene restituita viene quindi utilizzata da jsonpickle
per rappresentare invece lo stato. Entrambi i metodi devono essere implementati.
Se __getstate__
è non implementato, jsonpickle
utilizza l'attributo __dict__
invece, in modo dalla propria versione solo bisogno di usare lo stesso dizionario, rimuovere la chiave _sa_instance_state
e si è fatto:
def __getstate__(self):
state = self.__dict__.copy()
del state['_sa_instance_state']
return state
def __setstate__(self, state):
self.__dict__.update(state)
Qualunque siano __getstate__
rendimenti sarà elaborato ulteriormente, in modo ricorsivo, non c'è bisogno di preoccuparsi di gestire i sottooggetti lì.
Se l'aggiunta di __getstate__
e __setstate__
non è un'opzione, è possibile anche registrare un custom serialization handler per la classe; lo svantaggio è che mentre può farla finita con la restituzione di un dizionario, un gestore personalizzato dovrà restituire un valore completamente appiattito.
fonte
2013-08-09 13:30:28
L'aggiunta di '__getstate__' e' __setstate__' funziona come un incantesimo per ora, grazie. Invece di scrivere le stesse linee di codice per ogni modello, l'implementazione di un decoratore per rimuovere i campi ignorati da '__dict__' potrebbe essere una buona idea per il futuro. – mkubilayk
I secondo ciò che mkubilayk desidera per una funzionalità futura, sarebbe molto analogo alla serializzazione xml di .NET [Proprietà XmlAttributes.XmlIgnore] (https://msdn.microsoft.com/en-us/library/system.xml.serialization .xmlattributes.xmlignore (v = vs.110) .aspx) – jxramos