Mono, Serializable objetos com MarshalByRefObject
-
21-08-2019 - |
Pergunta
Eu estou tentando porta um # aplicativo C para .NET (cliente-servidor), e estou correndo em problemas com a serialização.
O Linux Serializa cliente e objeto, mas o servidor Windows é incapaz de desserializá-lo, dando o erro:
System.Runtime.Serialization.SerializationException
O campo "MarshalByRefObject + __ identidade" não encontrado na classe
Deserialization é feito através de BinaryFormatter:
BinaryFormatter formatter = new BinaryFormatter();
formatter.Deserialize(data);
A classe em questão tem o atributo Serializable, e herda de MarshalByRefObject. Se eu remover a herança de MarshalByRefObject, ele funciona bem. Tudo funciona bem no Windows, e por isso estou assumindo que esta é uma questão específica Mono.
Qualquer ajuda / conselho seria muito apreciada ^ _ ^
Solução
Binário serialização depende de detalhes de implementação privadas. No seu caso, o __identity campo privado. Como os desenvolvedores Mono não têm acesso aos detalhes de implementação particulares, estes ocasionalmente não coincidem, e, assim, serialização binária nem sempre é compatível entre Net e Mono.
Por favor, abrir um processo de teste com Mono: http://www.mono-project.com/Bugs
Para contornar esse problema, você pode fazer o seu próprio serialização personalizada para a sua classe.