【问题标题】:Can I use System.Xml 2.0 in a .NET 4.0 project?我可以在 .NET 4.0 项目中使用 System.Xml 2.0 吗?
【发布时间】:2012-03-21 09:38:27
【问题描述】:

我需要反序列化刚从 .NET 2.0 升级的 .NET 4.0 项目中的一堆 XML 文件。因为序列化函数have changed,反序列化现在失败了,因为我的类继承自第三方对象库中的一堆属性没有用 [XmlIgnore] 标记。

问题:我可以从 .NET 4.0 项目中使用反射从 2.0 版本的 System.Xml.dll 调用 Deserialize() 函数吗?

我试过了:

Assembly.Load("System.Xml, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089");

但这因 FileNotFoundException 而失败(它确实搜索了 GAC,对吗?)

【问题讨论】:

  • 我知道,这听起来很明显,但是您不能获取第三方库的更新吗?
  • 我可以,这可能是我要走的路。它是开源的:lhotka.net/cslanet
  • 根据给出的答案,我认为这将是最少的痛苦......

标签: .net reflection xml-serialization


【解决方案1】:

你不能 - AFAIK。

当您为项目设置目标框架时,就是这样。您将获得 System.Xml 2.0 或 4.0。

然而,我对 2.0 和 4.0 之间的序列化之间的区别感到困惑。 [XmlIgnore] 肯定在 2.0 中吗?

【讨论】:

  • 是的,但在 .NET 4.0 中,如果没有设置方法的属性未标记为 [XmlIgnore],则反序列化会引发异常
  • 因为它们位于我的类继承自的第三方库中。
【解决方案2】:

您可以编写一个针对 framework2 的小 dll 来返回该类的 v2 版本,然后从中填充 v4 版本。在某处/某处有一面旗帜,你可以在加载时将它们翻转过来。

你确定反序列化失败的原因吗?我原以为它会向后兼容,事实上它不是很可怕的想法......

【讨论】:

  • 是的,我确定,我同意这很可怕。此代码 gist.github.com/2145953 将在 2.0 中传递,但不会在 4.0 中传递,除非您使用 [XmlIgnore] 标记 SomeProperty。您得到的错误是 InvalidOperationException - 错误 CS0200: Property or indexer (...) cannot be assigned to -- 它是只读的
  • 我会尝试你的第二种组装方法...值得一试
  • 这是对序列化版本控制问题的另一个参考,虽然有点令人困惑:social.msdn.microsoft.com/forums/en-US/asmxandxml/thread/…。说它将在 3.5 SP1 中修复,但显然在 4.0 中仍然存在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多