我需要为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中覆盖哪些方法,以便它将使用重写的方法?
答案 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
对象被隐藏在哈希值部分的列表中,这也适用!这就是我要找的! :)