<p>不能告诉默认类pickler忽略某些内容,不</p>
<p><code>jsonpickle</code><em>不支持<a href="http://docs.python.org/2/library/pickle.html" rel="noreferrer">^{<cd2>} module</a><a href="http://docs.python.org/2/library/pickle.html#object.__getstate__" rel="noreferrer">^{<cd3>}</a>和<a href="http://docs.python.org/2/library/pickle.html#object.__setstate__" rel="noreferrer">^{<cd4>}</a>方法。如果您的类实现了这两个方法,那么返回的内容将由<code>jsonpickle</code>用来表示状态。两种方法都需要实现。</p>
<p>如果<code>__getstate__</code>未实现,则<code>jsonpickle</code>将使用<code>__dict__</code>属性,因此您自己的版本只需使用相同的字典,删除<code>_sa_instance_state</code>键即可:</p>
<pre><code>def __getstate__(self):
state = self.__dict__.copy()
del state['_sa_instance_state']
return state
def __setstate__(self, state):
self.__dict__.update(state)
</code></pre>
<p>无论<code>__getstate__</code>返回是什么,都将被进一步、递归地处理,不必担心在那里处理子对象。</p>
<p>如果添加<code>__getstate__</code>和<code>__setstate__</code>不是一个选项,您还可以为类注册<a href="http://jsonpickle.github.io/api.html#jsonpickle-handlers-custom-serialization-handlers" rel="noreferrer">custom serialization handler</a>;缺点是,虽然<code>__getstate__</code>只需返回字典就可以了,但是自定义处理程序将需要返回一个完全展平的值。</p>