Necesito inicializar el campo de solo lectura privado después de la Deserialización. He folowing DataContract:Inicializar campos de solo lectura privados después de la Deserialización
[DataContract]
public class Item
{
public Item()
{
// Constructor not called at Deserialization
// because of FormatterServices.GetUninitializedObject is used
// so field will not be initialized by constructor at Deserialization
_privateReadonlyField = new object();
}
// Initialization will not be called at Deserialization (same reason as for constructor)
private readonly object _privateReadonlyField = new object();
[DataMember]
public string SomeSerializableProperty { get; set; }
[OnDeserializing]
public void OnDeserializing(StreamingContext context)
{
// With this line code even not compiles, since readonly fields can be initialized only in constructor
_privateReadonlyField = new object();
}
}
Todo lo que necesito, que después de Deserialización _privateReadonlyField no es nulo.
Cualquier sugerencia sobre esto - ¿es posible? O necesito eliminar la clave "readonly", que no es una buena opción.
Qué método de serialización está usando? La construcción de los objetos difiere según los diferentes métodos. –
¿Qué hay de malo en marcar su '_privateReadonlyField' a' [DataMember] '? El serializador de contrato de datos se encargaría sin problema. – dasblinkenlight
Joachim Isaksson: Estoy usando DataContractJsonSerializer, pero en realidad esto no importa: todos los serializadores usan FormatterServices.GetUninitializedObject al deserializar. – Andris