2011-08-25 12 views
6

Jakie jest użycie atrybutu "IsRequired" Protobuf-Net ProtoMember?Protobember-Net ProtoMember "Wykorzystanie atrybutu IsRequired"

Jaki będzie efekt, jeśli dodaję nową właściwość (członka) do już serializowanej klasy w pliku. Jeśli użyję "IsRequired = true", po prostu zaakceptuje to bez ładowania wartości (ponieważ jej tam nie ma) lub czy powinienem ustawić wartość false? A jeśli ustawię go na wartość false, czy wartość zostanie poprawnie zserializowana?

+0

Właśnie wróciłem z kilku dni. Przyjrzę się temu później –

Odpowiedz

6

Według Issue 262: ProtoMembers with IsRequired=true aren't really required:

Obecnie isrequired głównie oddziaływań serializacji, zmuszając go zignorować pewne reguły domyślne.

Gdy IsRequired ma wartość false (wartość domyślna), wartości domyślne nie są serializowane, np. wartość całkowita 0 nie byłaby serializowana, wartość 1 byłaby.

Gdy parametr IsRequired ma wartość true, wszystkie wartości, w tym wartości domyślne, są przekształcane do postaci szeregowej.

Na deserializację przy użyciu parametru protobuf-net nie ma wpływu wartość atrybutu IsRequired. Jednak jeśli używasz innej implementacji Google Protocol Buffers do deserializacji, możesz zobaczyć inne zachowanie.

Po dodaniu nowej właściwości do istniejącej klasy i deserializacji zserializowanego pliku napisanego przed dodaniem właściwości, nowa właściwość po prostu nie zostanie ustawiona.