我有一个具有可选字段的对象。我以这种方式定义了我的序列化器:
class ProductSerializer(serializers.Serializer):
code = serializers.Field(source="Code")
classification = serializers.CharField(source="Classification", required=False)
我认为
required=False
如果不存在,可以绕过该字段。但是,在文档中提到这会影响反序列化而不是序列化。
我收到以下错误:
'Product' object has no attribute 'Classification'
当我尝试访问.data
序列化实例时,这正在发生。(这是否意味着反序列化导致了这一问题?)
对于没有的实例会发生这种情况Classification
。如果我Classification
从序列化程序类中忽略它,则可以正常工作。
如何正确执行此操作?即,使用可选字段序列化对象。
序列化程序是经过精心设计的,以使用一组固定的字段,因此,您将无法轻易地选择性地删除其中一个键。
您可以使用SerializerMethodField返回字段值,或者None
如果该字段不存在,或者根本不能使用序列化器,只需编写一个视图即可直接返回响应。
*serializer.fields
可以在实例化序列化程序上修改 *REST Framework 3.0的更新
。当需要动态序列化程序类时,我可能会建议您在自定义Serializer.__init__()
方法中更改字段。
Jackson版本:2.10.1 谢谢你的回答!
如果我有一个模型序列化程序,其中数据库模型中不需要first_name和last_name(blank=True,null=True,default=None),并且我选择提交可能包含或可能不包含“first_name”或“last_name”字段的json数据,那么无论这些字段是否通过json请求提交,这些字段不应该存在于已验证的_数据[]中,因为它们列在序列化程序字段中,并且其默认值设置为无?
我有课 其中field 如果使用ObjectMapper反序列化此对象 结果是这样的: 添加了转义(\),并且json字段有引号(")。如何正确摆脱这一点并制作单个JSON?像这样:
考虑以下代码: 现在扩展了一个实现接口的类。类和是带有一堆getter和setter的POJOS。FindBugs抱怨和字段说: 这个Serializable类定义了一个非基元实例字段,它既不是瞬态的、Serializable的,也不java.lang.Object的,并且似乎没有实现Externalizable接口或readObject()和WriteObject()方法。 好吧,所以一切都很好
我有一个没有扩展可串行化或可外部化接口的类,但在netbeans中使用FindBugs时仍然会遇到错误。有人能告诉我如何解决这个问题吗? 这是我的课 FindBug中的Bug:类分析器定义了一个非瞬时的非序列化实例字段objAnalyzerVar,对于objAnalyzerDataTypeInfo也是如此;
我有一个具有以下属性的对象。 该对象位于库中,我不希望仅为了序列化目的而修改它,并且希望避免创建另一个DTO的成本。 我如何序列化/反序列化可选属性?可选没有默认构造函数(两个apache公共对都没有),但我不能使用InstanceCreator,也不真正了解如何创建一个TypeAdapter,它只会将序列化委托给底层的可选内容。