There is some magic going on with WCF deserialization. How does it instantiate an instance of the data contract type without calling its constructor?
For example, consider this data contract:
[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
}
When obtaining an instance of this object via DataContractSerializer
you will see that the field _wasConstructorCalled
is false
.
So, how does WCF do this? Is this a technique that others can use too, or is it hidden away from us?