<p>我可以为你的情况想出三种解决办法:</p>
<p><strong>解决方案1:</strong>
使用<a href="https://github.com/sinarezaei/pykson" rel="nofollow noreferrer">Pykson</a>第三方库并定义要序列化为pykson字段的字段。在</p>
<p>样品:</p>
<pre><code>class MyItemClass(pykson.JsonObject):
saved_property = pykson.IntegerField()
my_object = MyItemClass(saved_property=1, accept_unknown=True)
my_object.unsaved_property = 2
pykson.Pykson().to_json(my_object)
</code></pre>
<p>免责声明:我是pykson库的开发人员。在</p>
<p><strong>解决方案2:</strong>
第二种解决方案是使用带有自定义默认反序列化程序的包装类。在</p>
^{pr2}$
<p><strong>解决方案3:</strong>
这可能是个坏主意,但是如果你有一个深层层次结构,你也可以添加一个函数到所有的C类中,这些类将被序列化,并使用这个函数来获取一个字典,并轻松地将字典转换为json。在</p>
<pre><code>class MyChildClass:
def __init__(self, serialized_property, not_serialized_property):
self.serialized_property = serialized_property
self.not_serialized_property = not_serialized_property
def to_dict(self):
# only add serialized property here
return {
"serialized_property": self.serialized_property
}
class MyParentClass:
def __init__(self, child_property, some_other_property):
self.child_property = child_property
self.some_other_property = some_other_property
def to_dict(self):
return {
'child_property': self.child_property.to_dict(),
'some_other_property': self.some_other_property
}
my_child_object = MyChildClass(serialized_property=1, not_serialized_property=2)
my_parent_object = MyParentClass(child_property=my_child_object, some_other_property='some string here')
json.dumps(my_parent_object.to_dict())
</code></pre>
<p>也可以使用默认处理程序获得相同的结果:</p>
<pre><code>class MyChildClass:
def __init__(self, serialized_property, not_serialized_property):
self.serialized_property = serialized_property
self.not_serialized_property = not_serialized_property
def to_dict(self):
# only add serialized property here
return {
"serialized_property": self.serialized_property
}
class MyParentClass:
def __init__(self, child_property, some_other_property):
self.child_property = child_property
self.some_other_property = some_other_property
def to_dict(self):
return {
'child_property': self.child_property,
'some_other_property': self.some_other_property
}
def handle_default(obj):
if isinstance(obj, MyChildClass):
return obj.to_dict()
elif isinstance(obj, MyParentClass):
return obj.to_dict()
return None
my_child_object = MyChildClass(serialized_property=1, not_serialized_property=2)
my_parent_object = MyParentClass(child_property=my_child_object, some_other_property='some string here')
json.dumps(my_parent_object, default=handle_default)
</code></pre>