2010-07-01 29 views

Respuesta

26

por lo general he hecho esto con un patrón de esta manera:

[DataContract] 
public class MyClass 
{ 
    [DataMember] 
    public string ScanDevice { get; set; } 

    public MyClass() 
    { 
     SetDefaults(); 
    } 

    [OnDeserializing] 
    private void OnDeserializing(StreamingContext context) 
    { 
     SetDefaults(); 
    } 

    private void SetDefaults() 
    { 
     ScanDevice = "XeroxScan"; 
    } 
} 

no se olvide el OnDeserializing, como su constructor no será llamado durante la deserialización.

+0

Gracias Dan. Tengo una pregunta. El valor predeterminado será XeroxScan, pero si un usuario pasa HPScan, ¿tomará HPScan correcto? – acadia

+0

¿Quiere decir si pasan un dispositivo al constructor? Si es así, sí, puede establecer la propiedad en el constructor después de llamar a SetDefaults y usará el nuevo valor. Si se refiere a la deserialización de los datos, eso también funcionará, ya que se llama a OnDeserializing antes de que ocurra la deserialización. De esta manera puede establecer todo su estado inicial 'predeterminado' antes de que sus propiedades se llenen durante la deserialización. –

+0

Intenté esto pero no parece estar funcionando. ¿OnDeserializing no se usa solo con serialización binaria? – xr280xr

5

Si desea siempre por defecto a XeroxScan, por qué no hacer algo tan simple como:

[DataMember(EmitDefaultValue = false)] 
public string ScanDevice= "XeroxScan"; 
+0

Hola, kd7, tu solución funciona solo si estamos utilizando el DataContract en el lado del servicio, pero para las solicitudes entrantes donde este DataContract se pasa como argumento, esto no funciona. Como solución alternativa debemos crear dos Propiedades [Una Normal y Una Nulable] en el DataContract y exponer un tipo que admite nulos como un DataMember y establecer los valores del campo expuesto al campo No Expuesto. – ajaysinghdav10d

+0

Está bien para los valores predeterminados de tipo y para otros acaba de establecer en el constructor mucho más elegante en mi humilde opinión – user1496062

Cuestiones relacionadas