хорошо, вы правы, что я не очень хорошо это объяснил.
У меня есть клиентское приложение и служба WCF сервера. Для передачи всех данных от клиента к серверу у меня есть 1 серверный API. Этот API ожидает словарь для передачи параметров. Когда я передаю int, string, ... все идет хорошо. Но я не могу сделать то же самое с классами. Поэтому я использую сериализацию этого класса на стороне клиента и десериализацию на классе сервера. Для десериализации мне нужно знать тип класса на стороне сервера. Поэтому я поместил параметр «AssemblyFullName» в BaseClass. Все мои классы наследуются от BaseClass.
Для связи с сервером у меня есть 1 способ. Каждое общение происходит с помощью этого метода.
internal static void Execute(Dictionary<string, object> parameters)
{
//finding type of object in parameters
foreach (KeyValuePair<string, object> keyValuePair in parameters)
{
// problem row
string fullName = keyValuePair.Value.GetType().FullName;
}
// rutine for comunication with server
}
Моя модель выглядит так, и она включена на стороне сервера и клиента.
public class BaseClass
{
private string AssemblyFullName { get; set; }
}
public class A : BaseClass
{
}
public class B : A
{
}
Один метод на стороне клиента ожидает "A" и соединяется с сервером.
public void ClientMethod(A expectedClass)
{
Execute(new Dictionary<string, object>() { { "identifierOfClassA", expectedClass } });
}
Вызов метода «Выполнить» всегда осуществляется через «ClientMethod» в этом типе.
A a = new A();
ClientMethod(a);
B b = new B();
ClientMethod(b);
Суть этого поста в том, почему строка в методе «Execute» возвращает «namespace.A» или «namespace.B»? Почему не всегда возвращается «namespace.A»? Я вызываю его из метода "ClientMethod", который ожидает только "A".
Надеюсь, теперь это станет для вас более ясным.
С наилучшими пожеланиями Томас.