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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top