2010-11-02 46 views
1

在c#中获取对象的XML表示的最简单方法是什么? 我知道你可以使用XmlSerializer,但我不知道是否有更好的方法。用c#获取对象的xml表示的最佳方式?

我可以以某种方式使用LINQ吗?

更新:通过最好的我的意思是我可以使用它与不可变的对象,我不需要做一个没有准则的构造函数。

回答

0

希望这个例子可以帮助 - 包括使用LINQ对XML序列化和反序列化:

http://thecodeslinger.wordpress.com/2007/12/17/custom-xml-serialization-with-linq/

也有LINQ到XSD(它在孵化,不知道这对你很重要 - 它不我...):

http://www.hanselman.com/blog/LINQToEverythingLINQToXSDAddsMoreLINQiness.aspx

斯科特Hanselman的让此评论:

LINQ to XSD使用(老化的)XSD.exe创建的.NET类与 的保真度比创建的 好得多。

下载链接在这里:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a45f58cd-fcfc-439e-b735-8182775560af&displaylang=en

1

这实际上取决于你的意思是“更好”。我个人喜欢使用LINQ to XML来定制对象的序列化。它使您可以完全控制序列化(允许您随时间轻松更改模式,有可能保留当前代码版本无法理解的元素或属性),同时代码紧凑。

我已经在几个地方使用了这个,并且对结果感到满意。对于非常大且复杂的类型来说,这确实是一件痛苦的事情 - 但对于合理简单的数据结构来说,它非常棒。

我个人不太喜欢依赖像XmlSerializer和BinarySerializer这样的东西。他们倾向于给你只是不够完善的控制做你想做的一切,或者添加像无参数构造函数的额外要求。

+0

你能不能举个例子?我在使用XmlSerializer时遇到问题,因为它需要读/写公共字段。但我想拥有一个不可改变的结构。 – 2010-11-02 19:59:27

+0

@wcf guru needed:在这种情况下,您可能会编写一个采用XElement的构造函数或一个名为FromXElement的静态方法,该方法会适当地创建一个实例。你还要创建一个执行序列化的'ToXElement'实例方法。不变性绝对是手卷方法的好处之一。 – 2010-11-02 20:01:17

+0

我只能找到使用LINQ从xml创建对象的引用,而不是从对象创建XML的另一种方式。你能指点我一个参考或函数名称开始?将不胜感激。 – 2010-11-02 20:05:42

相关问题