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 ^ _ ^

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top