【问题标题】:Object Serialization and Deserialization for XML and JSON in Ruby (library)?Ruby(库)中 XML 和 JSON 的对象序列化和反序列化?
【发布时间】:2011-06-19 02:35:23
【问题描述】:

我正在寻找一种从 xml/json 表示中序列化/反序列化对象的方法。

我不关心 xml 命名空间。

Ruby 中有什么可以让我做的事情:

class Person
   attr :name, true
   attr :age, true
   attr :sex, true
end

person_xml =
"<Person>
  <name>Some Name</name>
  <age>15</age>
  <sex>Male</male>
</Person>"

// and then do
p = person_xml.deserialize(Person.class)
// or something of that sort

来自 .Net 背景,我正在寻找可以让我从 restful web 服务消费/调度对象的东西。

您如何在 Rails 中使用 Web 服务? (xml和json)。使用 xpath/active 资源似乎有点过于冗长(即使对于 .Net 人员)

使用 ruby​​ 1.9.x、Rails 3.x

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby serialization


    【解决方案1】:

    因为您使用的是 Rails,Rails(通过 ActiveSupport)已经提供了一种在 YAML、XML 和 JSON 中序列化/反序列化对象的方法。

    例如

    class Post
      attr_accessor :title
      attr_accessor :body
    end
    
    post = Post.new.tap do |p|
      p.title = "A title"
      p.body = "A body"
    end
    
    post.to_yaml
    # => "--- !ruby/object:Post \nbody: A body\ntitle: A title\n"
    
    post.to_json
    # => => "{\"body\":\"A body\",\"title\":\"A title\"}"
    

    如果您使用 ActiveRecord 模型,那么 Rails 知道如何序列化/反序列化它们。

    我写了一篇关于serializing and deserializing objects in Ruby using JSON 的文章。这是关于serialization features of ActiveModel 的文档。

    【讨论】:

    • 在 Rails 之外使用它怎么样?我们需要使用几个不同的 Web 服务,并希望将响应反序列化为对象,以便我们可以轻松地操作它们。
    • 你不需要 Rails。如果您将 ActiveSupport 作为要求包括在内,则可以利用几乎相同的功能。否则,只需单独使用 JSON 库即可。
    • 我正在专门寻找一种反序列化为对象的方法。
    • 您好,感谢您的帮助。 decode 方法返回一个哈希值。我正在寻找能给我一个给定类的对象的东西。
    • 您应该实现该功能。否则使用 YAML。 YAML.dump && YAML.load.
    【解决方案2】:

    你应该考虑roar gem

    渲染

    song = Song.new(title: "Medicine Balls")
    SongRepresenter.new(song).to_json #=> {"title":"Medicine Balls"}
    

    解析

    song = Song.new(title: "Medicine Balls")
    SongRepresenter.new(song).from_json('{"title":"Linoleum"}')
    song.title #=> Linoleum
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-20
      • 1970-01-01
      • 2017-11-19
      • 2013-09-24
      • 1970-01-01
      • 2011-08-14
      • 2012-01-14
      • 1970-01-01
      相关资源
      最近更新 更多