2011-08-25 3 views
6

Qual è l'utilizzo per l'attributo ProtoMember ProtoMember "IsRequired"?Protobuf-Net ProtoMember Utilizzo "IsRequired" degli attributi

Che effetto avrà se aggiungo una nuova proprietà (membro) a una classe già serializzata in un file. Se utilizzo "IsRequired = true" lo accetteremo semplicemente senza caricare un valore (poiché non è lì) o dovrei impostare il valore su false? E se l'ho impostato su false, il valore verrà serializzato correttamente?

+0

Sono appena tornato da pochi giorni. Lo vedrò più tardi –

risposta

6

Secondo Issue 262: ProtoMembers with IsRequired=true aren't really required:

Attualmente, IsRequired principalmente impatti serializzazione, costringendolo a ignorare alcune regole predefinite.

Quando IsRequired è falso (valore predefinito), i valori predefiniti non sono serializzati, ad es. un valore intero di 0 non sarebbe serializzato, un valore di 1 sarebbe.

Quando IsRequired è true, tutti i valori, inclusi i valori predefiniti, sono serializzati.

La deserializzazione tramite protobuf-net non sembra essere influenzata dal valore dell'attributo IsRequired. Tuttavia, se stai utilizzando un'implementazione diversa di Google Protocol Buffers per la deserializzazione, potresti notare un comportamento diverso.

Se si aggiunge una nuova proprietà a una classe esistente e si deserializza un file serializzato scritto prima dell'aggiunta della proprietà, la nuova proprietà non sarà semplicemente impostata.