代码之家  ›  专栏  ›  技术社区  ›  Anindya Chatterjee

有没有任何方法可以用C在.NET中XML序列化匿名类型#

  •  3
  • Anindya Chatterjee  · 技术社区  · 15 年前

    有没有任何方法可以在.NET中序列化匿名类型?正常的XmlSerializer失败,因为类型未定义无参数构造函数;并且NetDataContractSeralizer失败,因为我们无法将DataContract或可序列化属性标记为匿名类。

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

    3 回复  |  直到 15 年前
        1
  •  3
  •   JaredPar    15 年前

    是的,可以序列化匿名类型。最简单的方法是创建一个实现 ISerializable 并使用反射检查匿名类型的字段,并根据需要对其进行序列化。它会很难看,但会起作用。

    不过,我认为更重要的问题是

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

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

        2
  •  1
  •   AllenG    15 年前

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

    创建所选XML文档的实例( XmlDocument , XDocumnet ,不管怎样),然后以这种方式构建它(在运行时插入节点和值),然后使用基本文件IO将其保存到某个地方。或者,如果你只是想在进程之间传递它,那么把它作为 MemoryStream Byte[]

        3
  •  0
  •   Jon Hanna    15 年前

    只有在非常一般的意义上,没有什么可以阻止您创建表示对象的XML,也没有什么可以阻止您创建状态反映某种XML的对象。

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