Hay algo de magia con la deserialización de WCF. ¿Cómo crea una instancia del tipo de contrato de datos sin llamar a su constructor?
Por ejemplo, considere este contrato de datos:
[DataContract]
public sealed class CreateMe
{
[DataMember] private readonly string _name;
[DataMember] private readonly int _age;
private readonly bool _wasConstructorCalled;
public CreateMe()
{
_wasConstructorCalled = true;
}
// ... other members here
}
Al obtener una instancia de este objeto a través de DataContractSerializer
, verá que el campo _wasConstructorCalled
es false
.
Entonces, ¿cómo hace esto WCF? ¿Es esta una técnica que otros pueden usar también, o está escondida de nosotros?
fuente
Sí, FormatterServices.GetUninitializedObject () es la fuente de la magia.
Si desea realizar una inicialización especial, consulte esto. http://blogs.msdn.com/drnick/archive/2007/11/19/serialization-and-types.aspx
fuente
[OnDeserialized]
fue la solución para mí!