Mono, oggetti Serializable con MarshalByRefObject
-
21-08-2019 - |
Domanda
Sto tentando di porting di un'applicazione C # per .NET (client server), e sono in esecuzione in problemi con la serializzazione.
Il client Linux serializza e l'oggetto, ma il server di Windows non è in grado di deserializzare esso, dando l'errore:
System.Runtime.Serialization.SerializationException
Il campo "MarshalByRefObject + __ identità" non trovato in classe
deserializzazione viene effettuata tramite BinaryFormatter:
BinaryFormatter formatter = new BinaryFormatter();
formatter.Deserialize(data);
La classe in questione ha l'attributo Serializable, ed eredita da MarshalByRefObject. Se rimuovo l'eredità di MarshalByRefObject, funziona benissimo. Tutto funziona bene in Windows, e così io parto dal presupposto che questo è un problema specifico Mono.
Qualsiasi aiuto / consiglio sarebbe molto apprezzato ^ _ ^
Soluzione
serializzazione binaria si basa su dettagli di implementazione privati. Nel tuo caso, il campo __identity privato. Perché gli sviluppatori Mono non hanno accesso ai dettagli di implementazione privati, questi a volte non corrispondono, e quindi la serializzazione binaria non è sempre compatibili tra .Net e Mono.
Si prega di presentare un caso di prova con Mono: http://www.mono-project.com/Bugs
Per ovviare a questo, si può fare la propria serializzazione personalizzata per la vostra classe.