2011-08-25 16 views
6

¿Para qué sirve el atributo Protobuf-Net ProtoMember "IsRequired"?Protobuf-Net ProtoMember Uso del atributo "IsRequired"

¿Qué efecto tendrá si agrego una nueva propiedad (miembro) a una clase ya serializada en un archivo? Si uso "IsRequired = true", ¿lo aceptará sin cargar un valor (ya que no está allí) o debería establecer el valor en falso? Y si lo configuro en falso, ¿el valor se serializará correctamente?

+0

Acabo de regresar de unos días de distancia. Lo veré más tarde –

Respuesta

6

Según Issue 262: ProtoMembers with IsRequired=true aren't really required:

Actualmente, isRequired principalmente impactos serialización, obligándola a pasar por alto algunas reglas predeterminadas.

Cuando IsRequired es falso (valor predeterminado), los valores predeterminados no se serializan, p. un valor entero de 0 no se serializaría, un valor de 1 lo haría.

Cuando IsRequired es verdadero, todos los valores, incluidos los valores predeterminados, se serializan.

La deserialización usando protobuf-net actualmente no se ve afectada por el valor del atributo IsRequired. Sin embargo, si está utilizando una implementación diferente de Google Protocol Buffers para la deserialización, puede observar un comportamiento diferente.

Si agrega una nueva propiedad a una clase existente y deserializa un archivo serializado escrito antes de agregar la propiedad, simplemente no se establecerá la nueva propiedad.

Cuestiones relacionadas