1

我一直在使用 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 文件中读取一组静态对象。

4

1 回答 1

1

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

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

我希望这有帮助...

于 2010-03-01T19:06:37.123 回答