希望有人可以帮助我。
我注意到使用序列化程序格式化的json输出采用了序列化程序的名称。即如果我使用的序列化程序是user_input_serializer,则JSON对象将为{ user_input:{...} }。如果序列化器是blah_blah_serializer那么输出将是{blah_blah:{...}}
我想知道无论我使用什么样的序列化器,我是否可以使那个前导标记相同。
编辑:
一些代码例如
class UserSerializer < ActiveModel::Serializer
attributes :first_name,
:last_name,
:email,
:gender,
:chat_handle,
:position,
:location,
:status
end
class UserShortSerializer < ActiveModel::Serializer
attributes :first_name,
:last_name,
:email
end
假设我有两个类在两种不同的情况下序列化相同的用户模型......不知何故,REST api中的json输出将带有{“user”:{...}}和{“user_short” :{...}} 分别。这为我们的客户端应用程序创建了一些潜在的解析问题?
答案 0 :(得分:0)
使用ActiveModel::Serializer
,您可以删除根密钥,例如:
UserShortSerializer.new(User.first).to_json(root: false)
或者您可以使用以下命名更改其名称:
UserShortSerializer.new(User.first).to_json(root: "my_root_name")
如果您希望全面使用某种行为,可以在config/initializers
文件夹中创建一个文件并设置ActiveModel::Serializer.root = "my_default_name"
。然后,如果在检索序列化数据时未指定其他根名称,则将使用默认名称。您还可以使用控制器中的default_serializer_options
方法调整默认值。
可以在active_model_serializers documentation和RailsCast #409 - Active Model Serializers中找到更多信息。