2012-03-21 93 views
2

我需要反序列化.NET 4.0项目中的一堆XML文件,该项目刚刚从.NET 2.0升级而来。由于序列化函数have changed,反序列化现在失败,因为我的类继承的第三方对象库中的一堆属性未标记为[XmlIgnore]。我可以在.NET 4.0项目中使用System.Xml 2.0吗?

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

我已经试过:

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

但这种失败,FileNotFoundException异常(它搜索GAC吧?)

+0

我知道,这听起来很明显,但能你没有得到第三方图书馆的更新吗? – 2012-03-21 09:50:05

+0

我可以,而且这可能是我要走下的路。它的开源:http://www.lhotka.net/cslanet/ – Nilzor 2012-03-21 10:13:55

+0

基于给出的答案,我认为这将是最少的痛苦...... – 2012-03-21 10:16:02

回答

1

你不能 - AFAIK。

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

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

+0

是的,但在.NET 4.0反序列化引发异常,如果一个没有设置方法的属性没有标记[XmlIgnore] – Nilzor 2012-03-21 09:48:14

+0

那么为什么你不能用一个标记呢? – 2012-03-21 09:51:34

+0

因为它们在我的类继承的第三方库中。 – Nilzor 2012-03-21 10:00:17

1

你可以编写一个针对framework2的小东西,以返回该类的V2版本,然后填充该版本的V4版本。有一个旗子在某处/ somehoe,你可以翻转它们,因为它们被加载。

你肯定为什么deserialisation失败,我会想到是向后兼容的,其实这个想法,这是不是很吓人?

+0

是的,我敢肯定,我同意这很可怕。此代码https://gist.github.com/2145953将在2.0中传递,但不在4.0中,除非使用[XmlIgnore]标记SomeProperty。你得到的错误是InvalidOperationException - 错误CS0200:属性或索引器(...)不能被分配到 - 它是只读的 – Nilzor 2012-03-21 10:12:38

+0

我会尝试你的第二个汇编途径,虽然...值得一拍 – Nilzor 2012-03-21 10:14:23

+1

这是另一个引用序列化版本问题,虽然这有点令人困惑:http://social.msdn.microsoft.com/forums/en-US/asmxandxml/thread/3dffcfdc-e857-4f01-87f2-67cf02099735。说它将被固定在3.5 SP1,但显然仍然在4.0 – Nilzor 2012-03-21 10:18:06

相关问题