У меня есть структура данных, использующая класс Set из стандартной библиотеки Ruby. Я хотел бы иметь возможность сериализовать свою структуру данных в строку JSON.
По умолчанию Set сериализуется как массив:
>> s = Set.new [1,2,3]
>> s.to_json
=> "[1,2,3]"
Это нормально, пока вы не попытаетесь десериализовать его.
Итак, я определил пользовательский to_json
метод:
class Set
def to_json(*a)
{
"json_class" => self.class.name,
"data" => {
"elements" => self.to_a
}
}.to_json(*a)
end
def self.json_create(o)
new o["data"]["elements"]
end
end
Что отлично работает:
>> s = Set.new [1,2,3]
>> s.to_json
=> "{\"data\":{\"elements\":[1,2,3]},\"json_class\":\"Set\"}"
Пока я не помещу Set в хэш или что-то в этом роде:
>> a = { 'set' => s }
>> a.to_json
=> "{\"set\":[1,2,3]}"
Есть идеи, почему мой пользовательский to_json
не вызывается когда Set вложен в другой объект?