Cast'инг
От: VadimB Россия  
Дата: 11.03.08 16:58
Оценка:
Есть проблемка:
Unable to cast object of type 'SomeNameSpace.SomeClass' to type 'SomeNameSpace.SomeClass'.
т.е. получается эксепшн. Код используется в гуе, в тестововм проекте — все работает нормально.
Вот примерный код:

public static SomeClass processXML(XmlDocument doc)
{
    XmlSerializer ser = new XmlSerializer(typeof(SomeClass));
    XmlElement elem = doc.DocumentElement;
    using (XmlNodeReader reader = new XmlNodeReader(elem))
    {
        return (SomeClass) ser.Deserialize(reader);
    }
}


GetType() == typeof(SomeClass);
т.е. экземпляр класса вроде нормальный, но вот не возвращается

в чем дело — никак не пойму
Re: Cast'инг
От: V.Petrovski Беларусь  
Дата: 11.03.08 18:50
Оценка: 7 (2) +4
Здравствуйте, VadimB, Вы писали:

VB>Есть проблемка: Unable to cast object of type 'SomeNameSpace.SomeClass' to type 'SomeNameSpace.SomeClass'.

VB>в чем дело — никак не пойму

[skipped]

99% в том что:
typeof(SomeClass).Assembly.CodeBase != ser.Deserialize(reader).GetType().Assembly.CodeBase


Safe Develop
Re: Cast'инг
От: mihailik Украина  
Дата: 12.03.08 01:08
Оценка:
VB>Unable to cast object of type 'SomeNameSpace.SomeClass' to type 'SomeNameSpace.SomeClass'.
VB>т.е. получается эксепшн. Код используется в гуе, в тестововм проекте — все работает нормально.

Странный случай. Тут же ему явно говорится, для какого типа сериализатор сделать.

Вы там случайно не используете 'Generate Serialization Assembly' в свойствах проекта, Build? Я бы подозревал, что эта serialization assembly сбилась.

Во всяком случае, после десериализации, но перед кастингом стоит кинуть в лог полное имя типа, полное имя сборки и путь к сборке для обоих typeof(SomeClass) и возвращаемого значения ser.Deserialize.
Re[2]: Cast'инг
От: VadimB Россия  
Дата: 12.03.08 09:50
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

VP>Здравствуйте, VadimB, Вы писали:


VB>>Есть проблемка: Unable to cast object of type 'SomeNameSpace.SomeClass' to type 'SomeNameSpace.SomeClass'.

VB>>в чем дело — никак не пойму

VP>[skipped]


VP>99% в том что:

VP>
VP>typeof(SomeClass).Assembly.CodeBase != ser.Deserialize(reader).GetType().Assembly.CodeBase
VP>


Да, действительно, для одного типа .dll, а для другого — .DLL
И как с этим можно побороться?
Re[3]: Cast'инг
От: V.Petrovski Беларусь  
Дата: 12.03.08 10:23
Оценка: 3 (1)
Здравствуйте, VadimB, Вы писали:

VB>Да, действительно, для одного типа .dll, а для другого — .DLL

VB>И как с этим можно побороться?

Всё зависти от того что там с этими сборками делаешь, но обычно юзаются следующие решения:
1. Сделать так чтобы загружалась одна и также сборка, чтобы CodeBase были равные
2. Как одно из решений первого, поместить сборку в GAC
3. Сдалать интерфейс, вынести его в общую сборку и поместить её в GAC.


SafeDevelop
Re: Cast'инг
От: VadimB Россия  
Дата: 17.06.08 14:42
Оценка:
Здравствуйте, VadimB, Вы писали:

VB>в чем дело — никак не пойму


Столкнувшись в очередной раз, нашел причину: сборки грузились через LoadFile, а не LoadFrom... Вот такая злобная бага из-за разницы в 3 буквы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.