У меня есть программа, которая сериализует объект и отправляет его по сети:
TcpClient client = new TcpClient();
client.ReceiveTimeout = 10000;
client.SendTimeout = 10000;
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);
client.Connect(serverEndPoint);
BinaryFormatter binaryformatter = new BinaryFormatter();
NetworkStream networkStream = client.GetStream();
if (networkStream.CanWrite)
{
binaryformatter.Serialize(networkStream, kort);
}
А с другой стороны я получаю и десериализую код как таковой:
TcpClient tcpClient = (TcpClient)client;
tcpClient.SendTimeout = 10000;
tcpClient.ReceiveTimeout = 10000;
NetworkStream clientStream = tcpClient.GetStream();
try
{
if (clientStream.CanRead)
{
BinaryFormatter binaryformatter = new BinaryFormatter();
binaryformatter.Binder = new AllowAllAssemblyVersionsDeserializationBinder();
Kort tempkort = (Kort)binaryformatter.Deserialize(clientStream);
SetImage(tempkort);
}
}
catch (SerializationException e)
{
MessageBox.Show("Failed to deserialize. Reason: " + e.Message);
throw;
}
finally
{
clientStream.Close();
tcpClient.Close();
}
Но когда я десериализовал, я получил эту ошибку о том, что сборка отсутствует:
«Необработанное исключение типа
System.Runtime.Serialization.SerializationException
произошло в Server.exe. Дополнительная информация: не удалось найти сборку« Клиент, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null ».
который я решил с этим:
sealed class AllowAllAssemblyVersionsDeserializationBinder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
String currentAssembly = Assembly.GetExecutingAssembly().FullName;
// In this case we are always using the current assembly
typeName = "Server.Kort";
assemblyName = currentAssembly;
// Get the type using the typeName and assemblyName
Type typeToDeserialize = Type.GetType(String.Format("{0}, {1}",
typeName, assemblyName));
return typeToDeserialize;
}
}
Но теперь, когда я пытаюсь это сделать, я все время получаю сообщение об ошибке:
«Объект типа
Server.Kort
не может быть преобразован в типServer.Kort+kortvalör
.»
И я не знаю, как это исправить.