Sie können nicht sagen, dass der Standard-Klassen-Abbeißer etwas ignoriert, nein.
jsonpickle
tut Unterstützung der pickle
module__getstate__
und __setstate__
Methoden. Wenn Ihre Klassen diese beiden Methoden implementieren, wird das, was zurückgegeben wird, von jsonpickle
verwendet, um stattdessen den Status darzustellen. Beide Methoden müssen implementiert werden.
Wenn __getstate__
ist nicht implementiert, jsonpickle
verwendet das __dict__
Attribut statt, so dass Ihre eigene Version muss lediglich das gleiche Wörterbuch verwenden, entfernen Sie die _sa_instance_state
Schlüssel und Sie sind fertig:
def __getstate__(self):
state = self.__dict__.copy()
del state['_sa_instance_state']
return state
def __setstate__(self, state):
self.__dict__.update(state)
Was auch immer __getstate__
Renditen Wird rekursiv weiterverarbeitet, müssen Sie sich keine Gedanken über die Behandlung von Unterobjekten machen.
Wenn das Hinzufügen von __getstate__
und __setstate__
keine Option ist, können Sie auch einen custom serialization handler für Ihre Klasse registrieren; der Nachteil ist, dass während __getstate__
mit nur ein Wörterbuch zurückgeben kann, muss ein benutzerdefinierter Handler einen vollständig abgeflachten Wert zurückgeben.
Das Hinzufügen von '__getstate__' und' __setstate__' funktioniert jetzt wie ein Zauber, danke. Anstatt für jedes Modell die gleichen Codezeilen zu schreiben, ist die Implementierung eines Dekorators zum Entfernen ignorierter Felder aus "__dict__" möglicherweise eine gute Idee für die Zukunft. – mkubilayk
Ich zweitens, was Mkubilayk für ein zukünftiges Feature wünscht, würde es sehr analog zu .NET Xml Serialisierung [XmlAttributes.XmlIgnore-Eigenschaft] (https://msdn.microsoft.com/en-us/library/system.xml.serialization .xmlattributes.xmlignore (v = vs.110) .aspx) – jxramos