代码之家  ›  专栏  ›  技术社区  ›  christophercotton

是否有一个ruby等价于.net datacontract序列化程序

  •  1
  • christophercotton  · 技术社区  · 15 年前

    我一直在使用wcf的datacontract和datacontractserializer将对象读/写到xml文件。我们想切换到使用ruby on rails版本,我想知道我可以使用什么。我们的对象具有如下属性(这些只是示例而不是确切的对象):

    [DataContract]
    public class City
    {
        [DataMember]
        public string Name { get; set; }
    
        [DataMember]
        public string Location { get; set; }
    }
    
    [DataContract]
    public class Person
    {
        [DataMember]
        public string Name { get; set; }
    
        [DataMember]
        public City Home {get; set; }
    
        // returns true if the city is near me
        public bool NearMe(City myCity) { // insert code to compare cities }
    }
    

    在对象中读取的代码是:

    DataContractSerializer ds = new DataContractSerializer(typeof(Person));
    using (Stream s = File.OpenRead("person1.xml"))
    {
         Person p = (Person) ds.ReadObject(s);
    }
    

    在ruby/rails中执行相同操作的等效格式是什么?如何定义对象?从XML文件中读取它们的方法是什么?我已经看到我可以尝试将所有东西定义为一个模型,然后为每个对象创建一个后端数据库。因为我们不需要这个应用程序的数据库,而只是从XML文件中读取一组静态对象,所以在不创建所有数据库表的情况下是否可以这样做?

    1 回复  |  直到 15 年前
        1
  •  1
  •   jonnii    15 年前

    如果需要支持来自wcf的xml模式,并且不需要有数据库支持应用程序,可以查看happy mapper:

    http://railstips.org/blog/archives/2008/11/17/happymapper-making-xml-fun-again/

    这是在ruby中序列化xml和xml的一个很好的方法。

    例如:

    class City
      include HappyMapper
      element :name, :tag => "Name"
      element :location, :tag => "Location"
    end 
    
    class Person
      include HappyMapper
      element :name, :tag => "Name"
      has_one :city, :tag => "City"
    end
    

    然后通过执行以下操作来解析XML:

    people = Person.parse(xml_string)
    people.each do |person|
      puts person.name
    end
    

    我希望这能有帮助…