有没有办法让xml使用C#序列化.net中的匿名类型

时间:2010-08-16 15:24:50

标签: c# .net serialization anonymous-types

有没有办法在.net中序列化匿名类型?正常的XmlSerializer失败,因为类型没有定义无参数构造函数;和NetDataContractSeralizer失败,因为我们无法将DataContract或Serializable属性标记为匿名类。

那么有什么聪明的方法还是我们做不到的?

3 个答案:

答案 0 :(得分:3)

是的,可以序列化匿名类型。想到的最简单的方法是创建一个实现ISerializable的包装器对象,并使用反射来检查其字段的匿名类型并根据需要对它们进行序列化。这将是非常丑陋,但会奏效。

但我认为更重要的问题是

  

是否可以反序列化匿名类型?

答案是“不是一般意义上的”。匿名类型是程序集特定类型。因此,尽管可以针对特定的匿名类型以特定方式执行,但它在一般意义上是不可行的,而不是在不同的程序集之间,因为它们是内部的。

答案 1 :(得分:1)

定义“序列化”。序列化意味着以后反序列化的能力,如果没有定义的类,则没有任何内容可以将反序列化为。但是,如果您只是希望将数据放在XML文件中以便稍后进行撤销,那么您当然可以这样做。

创建所选XML文档的实例(XmlDocumentXDocumnet,无论如何)并以此方式构建(随时插入节点和值),然后使用基本文件IO保存它在某个地方。或者,如果您只是尝试在流程之间或某些流程之间传递它,请将其作为MemoryStreamByte[]

传递

答案 2 :(得分:0)

只是在一般意义上说,没有什么可以阻止你创建代表一个对象的XML而没有什么可以阻止你创建一个状态反映某些XML的对象。

在框架直接支持的特定意义上,并导致一个由程序集定义的类型的对象,然后没有。根据定义,没有定义匿名对象,这就是匿名对象。