我有一个ObservableCollection项目。我想将它们转换成XML格式,以便我可以将它们存储起来供以后使用。我对LINQ有点新,我不确定如何做到这一点。我知道我需要依赖XDocument。但我不知道如何执行查询并将结果转换为字符串格式。使用LINQ将CLR对象写到XML
有人可以为我提供一些指针吗?这似乎是一件容易的事情,如果不能完成,我会感到惊讶。
谢谢,
我有一个ObservableCollection项目。我想将它们转换成XML格式,以便我可以将它们存储起来供以后使用。我对LINQ有点新,我不确定如何做到这一点。我知道我需要依赖XDocument。但我不知道如何执行查询并将结果转换为字符串格式。使用LINQ将CLR对象写到XML
有人可以为我提供一些指针吗?这似乎是一件容易的事情,如果不能完成,我会感到惊讶。
谢谢,
我不知道你想要什么。 您可以创建XElement并使用ToString方法将其转换为字符串。 你可以用XDocument做同样的事情。
我完全不熟悉Silverlight,但它听起来像您将需要使用XML序列化。通过XML序列化,您可以将对象序列化为XML表示形式,然后您可以稍后将其从XML反序列化为对象。
下面是关于XML序列化一些教程和信息在.NET:
你需要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序列化。
使用DataContractSerializer是最好的选择。它旨在完成你所要求的。
优势超过的XMLSerializer:
选入,而不是选择退出属性序列化。这意味着你指定你想要序列化的东西
因为它是可选的,你可以序列化不仅属性,而且字段。您甚至可以序列化非公共成员,如私人或受保护的成员。并且你不需要在属性上设置一个集合(但是没有一个setter可以序列化,但不是反序列化)
比串行化数据的速度快10%左右,因为你没有完全控制数据的方式它是序列化的,可以做很多事情来优化序列化/反序列化过程。
可以了解SerializableAttribute并知道它需要被序列化
更多选择,并在KnownTypes控制
缺点:
根据你的需要,一个缺点可能比所有优点更大...... – 2010-11-21 10:02:04
如果你将.Net序列化为.Net,那么它效果很好。使用DataContractSerializer将XML发送到Java;不太好。 – rboarman 2010-11-23 01:13:44