ho queste classi:WCF - probem con la serializzazione di tipi ereditati
[DataContract]
public class ErrorBase {}
[DataContract]
public class FileMissingError: ErrorBase {}
[DataContract]
public class ResponseFileInquiry
{
[DataMember]
public List<ErrorBase> errors {get;set;};
}
Un'istanza della classe ResponseFileInquiry è ciò che il mio servizio metodo restituisce al client. Ora, se io riempio ResponseFileInquiry.errors con le istanze di ErrorBase, tutto funziona bene, ma se aggiungo un'istanza di tipo ereditario FileMissingError, ottengo un'eccezione lato servizio durante la serializzazione:
Type 'MyNamespace.FileMissingError' with data contract name 'FileMissingError'
is not expected. Add any types not known statically to the list of known types -
for example, by using the KnownTypeAttribute attribute or by adding them to the
list of known types passed to DataContractSerializer.'
Così serializer sta ottenendo confuso perché si aspetta che l'Elenco contenga gli oggetti di tipo dichiarato (ErrorBase) ma riceve oggetti di tipo ereditato (FileMissingError).
Ho un sacco di tipi di errore e l'elenco conterrà combinazioni di essi, quindi cosa posso fare per farlo funzionare ???
Grazie, il blog ha tutti i modi possibili per dichiarare i tipi conosciuti. – Andrey
Nel mio caso, l'utilizzo di KnownType non aiuta molto poiché il tipo proviene da un assembly separato a cui non faccio riferimento. Altri sviluppatori stanno estendendo la classe che ho per il mio DataContract per aggiungere alcune proprietà. Cosa succede se volessi semplicemente buttare via qualsiasi classe derivata e usare la classe base? – brendonparker
Questa è la soluzione che ho dovuto usare: http: // StackOverflow.com/a/8414390/2460073 Nota: ho dovuto applicare il cliente DataContractSerializer al ClientBase – brendonparker