7

Si estoy serializando y luego deserializando una clase usando DataContractSerializer, ¿cómo puedo controlar los valores iniciales de las propiedades que no fueron serializadas?Establecer el valor inicial de una propiedad al usar DataContractSerializer

Considere la clase Person a continuación. Su contrato de datos está configurado para serializar las propiedades FirstName y LastName pero no la propiedad IsNew. Quiero IsNew para inicializar en VERDADERO si una nueva Persona está siendo instanciada como una nueva instancia o deserializada de un archivo.

Esto es fácil de hacer a través del constructor, pero según tengo entendido, DataContractSerializer no llama al constructor ya que podrían necesitar parámetros.

[DataContract(Name="Person")] 
public class Person 
{ 
    [DataMember(Name="FirstName")] 
    public string FirstName { get; set; } 

    [DataMember(Name = "LastName")] 
    public string LastName { get; set; } 

    public bool IsNew { get; set; } 

    public Person(string first, string last) 
    { 
     this.FirstName = first; 
     this.LastName = last; 
     this.IsNew = true; 
    } 
} 

Respuesta

10

Puede utilizar una devolución de llamada de serialización. Agregue el método siguiente a la clase Persona:

[OnDeserialized] 
void OnDeserialized(StreamingContext context) 
{ 
    this.IsNew = true; 
} 

Otra opción es eliminar los [DataContract] atributos y [DataMember]. En este caso DCSerializer llamará a su constructor cuando se deserialice.

+1

Como Pavel menciona que debería ser [OnDeserializing], el valor se sobrescribirá todas las veces en lugar de una sola vez (cuando faltaba). –

14

En realidad, la forma correcta de hacerlo es mediante el uso del atributo OnDeserializing (observe el sufijo "ing"). El método marcado con este atributo se invoca antes de que los valores de los miembros se deserialicen.

+0

Gracias. Sí, OnDeserializing es la forma correcta. Permite establecer el valor predeterminado que se puede sobrescribir si la fuente tiene el valor de la propiedad. – Hong

Cuestiones relacionadas