この問題は、Railsプロジェクトの外部でRubyのJSONシリアル化に依存している多くの人に表面化するでしょう。Railsプロジェクトでコードを使おうとすると、期待どおりに機能しません。
次のコードはRuby(Railsなし)から実行され、Aを出力します。Railsコンソールから実行されると、ハッシュを出力します。
つまり、jsonのシリアル化はコマンドラインのlib / appで機能しますが、Railsプロジェクトにインポートされた場合は機能しません。
これの理由/回避策は何ですか?
require 'json'
class A
def to_json(*a)
{:json_class => self.class.name}.to_json(*a)
end
def self.json_create(o)
A.new
end
end
class B
attr_accessor :value
def initialize(value)
@value = value
end
def to_json(*a)
{:json_class => self.class.name, :value => value}.to_json(*a)
end
def self.json_create(o)
B.new(o['value'])
end
end
b = JSON.parse(B.new(A.new).to_json)
puts b.value.class
Rubyは1.9.3、Railsは3.2.10です。