Я столкнулся с этим несколько лет назад при разработке многоуровневого приложения. Я надеюсь, что ваша ситуация такая же, как и у меня, так что это будет полезно.
Наша установка состояла в том, что у нас был один сервер, предназначенный только для обслуживания веб-служб для передачи данных между всеми другими компонентами.
Классы были определены в проекте веб-службы. Пример:
<Serializable()> _
Public Class RetailInformation_StoreInformation
...
End Class
Когда у нас был класс клиента, пытающийся десериализовать сериализованные данные, мы не могли этого сделать. Мы попытались скопировать dll, которая содержала класс RetailInformation_StoreInformation, в клиентские приложения, но он просто не десериализовался.
То, что мы в конечном итоге обнаружили, было это ..
Скажем, у нас есть клиентское приложение с именем StoreInfoDisplayApp
В проекте StoreInfoDisplayApp мы добавили веб-ссылку на веб-службу RetailInfoService.
Мы обнаружили, что НЕ можем десериализовать RetailInformation_StoreInformation из dll следующим образом:
Private Function DeSerializeStoreInfo(ByVal path As String) As RetailInformation_StoreInformation
Dim ser As New System.Xml.Serialization.XmlSerializer(GetType(RetailInformation_StoreInformation))
Dim reader As System.IO.Stream = File.OpenRead(path)
Dim returnvalue As RetailInformation_StoreInformation = CType(ser.Deserialize(reader), RetailInformation_StoreInformation)
reader.Close()
Return returnvalue
End Function
потому что компилятор (или память времени выполнения нечеткая) рассматривал это как StoreInfoDisplayApp.RetailInformation_StoreInformation
Вместо этого нам пришлось изменить все экземпляры
RetailInformation_StoreInformation
до
RetailInfoService.RetailInformation_StoreInformation
чтобы указать, что тип, который мы десериализовали, был того же типа, который обслуживал веб-сервис. Тогда это сработало как персик!