动态的自定义json序列化

时间:2014-11-29 07:23:51

标签: ruby-on-rails json serialization amazon-dynamodb

我需要为dynamoid中的模型编写一个自定义的json序列化器和反序列化器,它将写入DynamoDB。

https://github.com/Veraticus/Dynamoid#fields复制样本模型:

class User
  include Dynamoid::Document

  field :name
  field :email
  field :rank, :integer
  field :number, :float
  field :joined_at, :datetime
  field :another_class, :serialized

end

这里another_class字段是某个其他类(非原始)的对象。 another_class包含一些基元和一些非基元。如何实现自定义json序列化?

修改1:

我们可以在我的回答中实现自定义json序列化,但不使用:serialized

编辑2:

如果我们使用:serialized,它会在序列化后存储值,但它使用默认的YAML序列化程序。我有以下课程的对象:

 class CClass
    attr_accessor :a, :b
 end

序列化后存储的值为:

  

---!ruby / object:CClass \ na:aval \ nb:bval \ n

但现在我不想使用YAML序列化程序。我想使用自定义JSON序列化程序。对于例如它应该以下列方式存储对象:

  

{ “A-KEY1”: “AVAL”, “B-KEY2”: “BVAL”}

我应该在CClass中覆盖哪些方法,以便它将使用重写的方法?

1 个答案:

答案 0 :(得分:0)

在上面的模型中,another_class是一个字符串字段。 我正在寻找一种方法,让我可以为another_class变量赋予一个AnotherClass的对象。它会自动调用序列化方法。

但是,我已经找到了实现相同目标的方法,尽管我们自己调用这些方法。

因此,在AnotherClass类定义中,我们需要编写两个方法:to_json(*a)self.json_create(o),如下所述:http://www.skorks.com/2010/04/serializing-and-deserializing-objects-with-ruby/

class AnotherClass 
  def to_json(*a)
  end

  def def self.json_create(o)
  end
end

通过根据需要调用这两种方法,我将能够执行所需的任务。

编辑(2014/12/04):

我意识到调用JSON.dump(AnotherClass.new)正在调用AnotherClass#to_json方法。即使AnotherClass对象被隐藏在哈希值部分的列表中,这也适用!这就是我要找的! :)