Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用c#获取对象的xml表示的最佳方法?_C#_Xml_Linq_Serialization - Fatal编程技术网

使用c#获取对象的xml表示的最佳方法?

使用c#获取对象的xml表示的最佳方法?,c#,xml,linq,serialization,C#,Xml,Linq,Serialization,在c#中获取对象的XML表示的最简单方法是什么? 我知道您可以使用XmlSerializer,但我想知道是否有更好的方法 我可以用LINQ来做这个吗 更新:我的意思是,我可以将它用于不可变对象,而不需要创建没有参数的构造函数。这取决于你所说的“更好”是什么意思。就我个人而言,我喜欢使用LINQtoXML定制对象序列化。它使您能够完全控制序列化(允许您随时间轻松更改模式,可能保留当前代码版本不理解的元素或属性),同时代码仍然紧凑 我现在已经在一些地方使用过,并且对结果感到满意。当然,对于非常大和复

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

我可以用LINQ来做这个吗


更新:我的意思是,我可以将它用于不可变对象,而不需要创建没有参数的构造函数。

这取决于你所说的“更好”是什么意思。就我个人而言,我喜欢使用LINQtoXML定制对象序列化。它使您能够完全控制序列化(允许您随时间轻松更改模式,可能保留当前代码版本不理解的元素或属性),同时代码仍然紧凑

我现在已经在一些地方使用过,并且对结果感到满意。当然,对于非常大和复杂的类型来说,这是一件痛苦的事情——但对于相当简单的数据结构来说,这是一件好事


我个人不太喜欢依赖像XmlSerializer和BinarySerializer这样的东西。它们往往不能给你足够的控制来做任何你想做的事情,或者增加额外的要求,比如无参数构造函数。

这实际上取决于你所说的“更好”是什么意思。就我个人而言,我喜欢使用LINQtoXML定制对象序列化。它使您能够完全控制序列化(允许您随时间轻松更改模式,可能保留当前代码版本不理解的元素或属性),同时代码仍然紧凑

我现在已经在一些地方使用过,并且对结果感到满意。当然,对于非常大和复杂的类型来说,这是一件痛苦的事情——但对于相当简单的数据结构来说,这是一件好事


我个人不太喜欢依赖像XmlSerializer和BinarySerializer这样的东西。它们往往无法为您提供足够的控制来完成所有需要的操作,或者添加额外的要求,如无参数构造函数。

希望此示例有所帮助-包括使用LINQ的XML序列化和反序列化:

还有LINQ到XSD(它正在孵化中,不确定这对你是否重要-对我来说不重要…):

Scott Hanselman发表了以下评论:

LINQ到XSD使用 比真实的要高得多 使用(老化)XSD.exe创建

下载链接:


希望此示例有所帮助-包括使用LINQ的XML序列化和反序列化:

还有LINQ到XSD(它正在孵化中,不确定这对你是否重要-对我来说不重要…):

Scott Hanselman发表了以下评论:

LINQ到XSD使用 比真实的要高得多 使用(老化)XSD.exe创建

下载链接:


你能给我举个例子吗?我在使用XmlSerializer时遇到问题,因为它需要读/写公共字段。但是我想要一个不可变的结构。@wcf guru需要:在这种情况下,您可能会编写一个采用XElement的构造函数,或者编写一个名为FromXElement的静态方法,该方法创建了一个适当的实例。您还需要创建执行序列化的
ToXElement
实例方法。不变性无疑是手动方法的优点之一。我只能找到使用LINQ从xml创建对象的参考,而不能找到从对象创建xml的其他方法。你能给我指一个引用或函数名吗?非常感谢。@wcf专家:任何LINQ到XML教程都应该向您展示如何构建元素。一般来说,这只是调用适当的构造函数的问题:)在开始考虑如何使用LINQ进行序列化之前,我会尝试使用LINQ to XML。是的,我想我希望有一个自动序列化程序,我不需要自己构建XElements。无论我看到哪里,你都必须自己构建它,然后我想我也必须公开一个方法来处理集合以进行序列化。你能给我一个例子吗?我在使用XmlSerializer时遇到问题,因为它需要读/写公共字段。但是我想要一个不可变的结构。@wcf guru需要:在这种情况下,您可能会编写一个采用XElement的构造函数,或者编写一个名为FromXElement的静态方法,该方法创建了一个适当的实例。您还需要创建执行序列化的
ToXElement
实例方法。不变性无疑是手动方法的优点之一。我只能找到使用LINQ从xml创建对象的参考,而不能找到从对象创建xml的其他方法。你能给我指一个引用或函数名吗?非常感谢。@wcf专家:任何LINQ到XML教程都应该向您展示如何构建元素。一般来说,这只是调用适当的构造函数的问题:)在开始考虑如何使用LINQ进行序列化之前,我会尝试使用LINQ to XML。是的,我想我希望有一个自动序列化程序,我不需要自己构建XElements。无论我看到哪里,你都必须自己构建它,然后我想我必须公开一个方法来处理用于序列化的集合。