2010-11-20 50 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