2010-11-20 49 views
1

我有一個ObservableCollection項目。我想將它們轉換成XML格式,以便我可以將它們存儲起來供以後使用。我對LINQ有點新,我不確定如何做到這一點。我知道我需要依賴XDocument。但我不知道如何執行查詢並將結果轉換爲字符串格式。使用LINQ將CLR對象寫到XML

有人可以爲我提供一些指針嗎?這似乎是一件容易的事情,如果不能完成,我會感到驚訝。

謝謝,

回答

0

我不知道你想要什麼。 您可以創建XElement並使用ToString方法將其轉換爲字符串。 你可以用XDocument做同樣的事情。

0

我完全不熟悉Silverlight,但它聽起來像您將需要使用XML序列化。通過XML序列化,您可以將對象序列化爲XML表示形式,然後您可以稍後將其從XML反序列化爲對象。

下面是關於XML序列化一些教程和信息在.NET:

4

你需要Linq to XML。我不能在這裏張貼實際的代碼,因爲我不知道你的數據的結構,但這裏有一個虛擬的例子:

List<Person> people = ... 

var doc = new XDocument(
      new XElement("People", 
       from p in people 
       select new XElement("Person", 
        new XAttribute("Id", p.Id), 
        new XElement("LastName", p.LastName), 
        new XElement("FistName", p.FirstName)))); 

doc.Save("people.xml"); 

注意的LINQ是不是在這裏唯一的選擇。另一個非常好的方法是XML序列化。

2

使用DataContractSerializer是最好的選擇。它旨在完成你所要求的。

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer(v=VS.95).aspx

優勢超過的XMLSerializer:

  1. 選入,而不是選擇退出屬性序列化。這意味着你指定你想要序列化的東西

  2. 因爲它是可選的,你可以序列化不僅屬性,而且字段。您甚至可以序列化非公共成員,如私人或受保護的成員。並且你不需要在屬性上設置一個集合(但是沒有一個setter可以序列化,但不是反序列化)

  3. 比串行化數據的速度快10%左右,因爲你沒有完全控制數據的方式它是序列化的,可以做很多事情來優化序列化/反序列化過程。

  4. 可以瞭解SerializableAttribute並知道它需要被序列化

  5. 更多選擇,並在KnownTypes控制

缺點:

  1. 在對象是如何沒有控制在設置名稱和順序之外序列化
+0

根據你的需要,一個缺點可能比所有優點更大...... – 2010-11-21 10:02:04

+0

如果你將.Net序列化爲.Net,那麼它效果很好。使用DataContractSerializer將XML發送到Java;不太好。 – rboarman 2010-11-23 01:13:44