Il y a un peu de magie en cours avec la désérialisation de WCF. Comment instancier une instance du type de contrat de données sans appeler son constructeur?Comment la désérialisation de WCF instancie-t-elle des objets sans appeler un constructeur?
Par exemple, considérons ce contrat de données:
[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
}
Lors de l'obtention par DataContractSerializer
une instance de cet objet, vous verrez que le champ _wasConstructorCalled
est false
.
Alors, comment WCF fait-il cela? Est-ce une technique que d'autres peuvent utiliser aussi, ou est-ce caché loin de nous?
Eh bien, j'ai déjà posté une mauvaise réponse (maintenant supprimé) alors je me sentais coupable. Rien de tel que d'écraser un ego de programmeurs pour l'amener à faire des recherches. –
Est-ce que quelqu'un d'autre se demande maintenant, comment fonctionne FormatterServices.GetUninitializedObject, alors? Réflexion? – harpo
Si je rappelle son appel en code natif. Je ne pouvais pas suivre ça plus loin dans le trou du lapin avec Reflector. –