是否有与.NET DataContract序列化程序等效的Ruby

时间:2010-03-01 17:47:08

标签: ruby-on-rails wcf datacontractserializer

我一直在使用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文件中读取它们的方法是什么?我已经看到我可以尝试将所有内容定义为模型,然后为每个对象创建后端数据库。无论如何都可以在不创建所有db表的情况下执行此操作,因为我们不需要为此应用程序使用db,而只是从XML文件中读取静态的对象集。

1 个答案:

答案 0 :(得分:1)

如果您需要支持来自WCF的xml架构,并且您不需要支持应用程序的数据库,那么您可以查看快乐映射器:

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

这是在ruby中与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

我希望这会有所帮助......