Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.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# 有没有办法用C在.net中用xml序列化匿名类型#_C#_.net_Serialization_Anonymous Types - Fatal编程技术网

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

C# 有没有办法用C在.net中用xml序列化匿名类型#,c#,.net,serialization,anonymous-types,C#,.net,Serialization,Anonymous Types,有没有办法序列化.net中的匿名类型?普通XmlSerializer失败,因为该类型未定义无参数构造函数;NetDataContractSeralizer失败,因为我们无法将DataContract或可序列化属性标记到匿名类 那么有没有什么聪明的方法,或者我们就是做不到呢?定义“序列化”。序列化意味着以后可以反序列化,如果没有定义的类,就没有什么可反序列化的。但是,如果您只是想将数据放在XML文件中以便以后检索,那么您当然可以这样做 创建所选XML文档的实例(XmlDocument,xdocum

有没有办法序列化.net中的匿名类型?普通XmlSerializer失败,因为该类型未定义无参数构造函数;NetDataContractSeralizer失败,因为我们无法将DataContract或可序列化属性标记到匿名类

那么有没有什么聪明的方法,或者我们就是做不到呢?

定义“序列化”。序列化意味着以后可以反序列化,如果没有定义的类,就没有什么可反序列化的。但是,如果您只是想将数据放在XML文件中以便以后检索,那么您当然可以这样做


创建所选XML文档的实例(
XmlDocument
xdocument
,随便什么),并以这种方式构建它(在运行时插入节点和值),然后使用基本文件IO将其保存到某个位置。或者,如果您只是想在进程之间或类似的过程中传递它,那么可以将其作为
内存流
字节[]进行传递。
是的,可以序列化匿名类型。想到的最简单的方法是创建一个包装器对象,它实现了
ISerializable
,并使用反射检查匿名类型的字段,并根据需要序列化它们。这将是非常丑陋的,但会工作

然而,我认为更重要的问题是

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


答案是“不是一般意义上的”。匿名类型是程序集特定的类型。因此,虽然可以以特定的方式对特定的匿名类型执行此操作,但从一般意义上讲,这是不可行的,在不同的程序集之间也不可行,因为它们是内部的

仅在非常一般的意义上,没有任何东西可以阻止您创建表示对象的XML,也没有任何东西可以阻止您创建状态反映某种XML的对象


在特定意义上,直接由框架支持,并产生由程序集定义的类型的对象,则不。根据定义,匿名对象没有定义,这就是它匿名的原因。

Dup:这并没有那么复杂。一些反射魔法会起作用。看看我的解决方案: