2010-11-30 6 views
5

Ich muss benutzerdefinierte Methoden zum Serialisieren/Deserialisieren eines Objekts definieren. Ich möchte etwas wie das Folgende tun.Benutzerdefiniert to_yaml und domain_type

class Person 
    def to_yaml_type 
    "!example.com,2010-11-30/Person" 
    end 

    def to_yaml 
    "string representing person" 
    end 

    def from_yaml(yaml) 
    Person.load_from(yaml) 
    end 
end 

Wie lautet die korrekte Deklaration der Serialisierung/Deserialisierung?

Antwort

5

OK, hier ist was ich mit

class Person 

    def to_yaml_type 
    "!example.com,2010-11-30/person" 
    end 

    def to_yaml(opts = {}) 
    YAML.quick_emit(nil, opts) { |out| 
     out.scalar(taguri, to_string_representation, :plain) 
    } 
    end 

    def to_string_representation 
    ... 
    end 

    def Person.from_string_representation(string_representation) 
    ... # returns a Person 
    end 
end 

YAML::add_domain_type("example.com,2010-11-30", "person") do |type, val| 
    Person.from_string_representation(val) 
end 
4

kam Wenn Sie nur eine Teilmenge der Eigenschaften nur serialisiert werden wollen, nicht alle von ihnen, können Sie to_yaml_properties verwenden.

+1

Als Anmerkung sollte dies eine Liste von Instanzvariablen wie '% w [@foo @bar]' sein – tadman

Verwandte Themen