2012-03-21 2 views
2

Мне нужно десериализовать кучу XML-файлов в проекте .NET 4.0, который только что был обновлен с .NET 2.0. Поскольку функции Serialization have changed, десериализация теперь терпит неудачу, потому что куча свойств в библиотеке сторонних объектов, наследуемые моими классами, не отмечена [XmlIgnore].Могу ли я использовать System.Xml 2.0 в проекте .NET 4.0?

Вопрос: Можно ли вызвать функцию Deserialize() из версии 2.0 System.Xml.dll из проекта .NET 4.0 с использованием отражения?

Я пробовал:

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

, но это не удалось с FileNotFoundException (это поиск GAC, верно?)

+0

Я знаю, это звучит очевидно, но может Вы получаете обновление для сторонней библиотеки? –

+0

Я мог бы, и это, вероятно, путь, по которому я схожу. Это с открытым исходным кодом: http://www.lhotka.net/cslanet/ – Nilzor

+0

На основании полученных ответов я думаю, что это будет наименьшее количество боли ... –

ответ

1

Вы не можете - AFAIK.

Когда вы устанавливаете целевую структуру для своего проекта, то есть. Вы получаете либо System.Xml 2.0, либо 4.0.

Тем не менее, я смущен различием между сериализацией между 2.0 и 4.0. Неужели [XmlIgnore] был там в 2.0?

+0

Да, но в .NET 4.0 десериализация выдает исключение, если свойство без установленного метода не помечено [XmlIgnore] – Nilzor

+0

Так почему вы не можете пометить его одним? –

+0

Потому что они находятся в сторонней библиотеке, которую наследуют мои классы. – Nilzor

1

Вы можете написать dll wee, нацеленный на framework2, чтобы вернуть версию класса v2, а затем заполнить версию v4. У вас есть флаг где-то где-нибудь, и вы можете перевернуть их, когда они загружены.

Вы уверены о том, почему десериализация терпит неудачу, я бы ожидал, что он обратно совместим, на самом деле идея, что это не совсем страшно ...

+0

Да, я уверен, и я согласен, что это страшно. Этот код https://gist.github.com/2145953 будет проходить в версии 2.0, но не в 4.0, если вы не отметите SomeProperty с помощью [XmlIgnore]. Ошибка, которую вы получаете, - InvalidOperationException - ошибка CS0200: свойство или индекс (...) не может быть присвоено - это только чтение – Nilzor

+0

Я попробую ваш второй подход к сборке, хотя ... Стоит сделать снимок – Nilzor

+1

Вот еще одна ссылка на Проблема с версией сериализации, хотя это немного запутанно: http://social.msdn.microsoft.com/forums/en-US/asmxandxml/thread/3dffcfdc-e857-4f01-87f2-67cf02099735. Говорит, что он будет исправлен в 3.5 SP1, но, очевидно, он все еще присутствует в 4.0 – Nilzor

Смежные вопросы