Domanda

Utilizzando Protobuf-Net, vedo che non sembra possibile deserializzare una classe senza avere un costruttore senza parametri o I può essere manca qualcosa?

Non voglio che alcune delle classi con un costruttore senza parametri. C'è una sorta di attributi che potrei usare o qualche altra tecnica?

È stato utile?

Soluzione

protobuf-net dipende attualmente per avere un costruttore senza parametri di lavoro.

Tuttavia, che il costruttore non deve essere pubblico ( userà riflessione, se necessario, per invocarlo ) in modo da essere in grado di definire il costruttore privato necessaria solo per l'utilizzo da parte protobuf-net (aggiungendo un commento sul perché) e affrontare specifiche questioni connesse serializzazione lì.

In questo modo il resto della vostra api da essere in grado di costruire istanze 'illegali'.

Marc sottolinea che se si sta parlando l'oggetto messaggio più esterno, si potrebbe anche creare l'oggetto se stessi e chiamare Serializer.Merge. Ma se ha bisogno di creare un oggetto (perché ha attualmente un esempio nullo, o per le nuove voci di un elenco / array), allora sembra per un costruttore di default.

Altri suggerimenti

ShuggyCoUk ha ragione su di esso con il costruttore senza parametri.

Solo per completezza, anche se - se si sta parlando di più esterna oggetto messaggio, si potrebbe anche creare l'oggetto se stessi e chiamare Serializer.Merge. Ma se ha bisogno di creare un oggetto (perché ha attualmente un'istanza null, o per le nuove voci di un elenco / array), allora sembra per un costruttore di default.

I supporre che avrei potuto anche fornire un certo margine di profitto nel l'attributo di dire "basta creare un oggetto grezzo tramite FormatterServices", ma questo si sente inutile (a fronte di un costruttore senza parametri privata), e non può lavorare su tutte le piattaforme (Silverlight, CF, ecc - di essere problemi probabili).

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