2010-03-01 59 views
1

我一直在使用WCF的DataContract和DataContractSerializer將對象讀取/寫入XML文件。我們希望切換到使用Ruby on Rails版本,並且我想知道我可以使用什麼。我們必須有像屬性的對象(這些只是例子沒有確切的對象):是否存在與.NET DataContract序列化程序相當的Ruby

[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文件中讀取一組靜態的對象。

+0

是否XML模式必須匹配WCF之一? – jonnii 2010-03-01 19:00:52

+0

是的,匹配WCF模式非常有用,因爲我們可以直接替換服務,客戶端不會知道其中的差別。 – christophercotton 2010-03-02 15:38:07

回答

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 

我希望這有助於...