2014-11-29 2 views
0

DynamoDB에 기록 될 다이나모 형 모델의 사용자 정의 json 시리얼 라이저 및 디시리얼라이저를 작성해야합니다. https://github.com/Veraticus/Dynamoid#fields에서다이나믹 형의 사용자 정의 json 직렬화

복사 샘플 모델 :

여기
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 

직렬화 후 저장된 값을했다 :

--- 루비/대상 :! CClass 수를 NA : \ 군함 \의 NB : bval \ 없음을

나는 다음과 같은 클래스의 객체를했다

하지만 이제 YAML 시리얼 라이저를 사용하고 싶지 않습니다. 사용자 지정 JSON serializer를 사용하고 싶습니다. 예 : 그것은 다음과 같은 방법으로 객체를 저장해야합니다 :

{ "A-키 1": "군함", "B-키 2": "bval"} 내가 그렇게 CClass에서 오버라이드 (override) 할 어떤 방법

그것은 오버라이드 된 메소드를 사용할 것인가?

답변

0

위 모델에서 another_class는 문자열 필드입니다. 나는 another_class 변수에 AnotherClass이라는 객체를 할당 할 수있는 방법을 찾고있었습니다. 그리고 자동으로 직렬화 메서드를 호출합니다.

그러나 이러한 방법을 직접 호출해도 동일한 결과를 얻을 수있는 방법을 발견했습니다. 여기에 설명 된대로 to_json(*a)self.json_create(o) :

그래서, AnotherClass 클래스 정의에서, 우리는 두 가지 방법을 작성해야합니다 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월 4일는) :

나는 전화 JSON.dump(AnotherClass.new)AnotherClass#to_json 방법을 호출하는 것을 깨달았다. 이것은 AnotherClass 객체가 해쉬의 값 부분에 목록에 묻혀있는 경우에도 적용됩니다! 이것은 내가 찾고 있었던 것이다! :)

관련 문제