Après avoir refactorisé le code du Serializer, j’ai choisi d’implémenter la sérialisation des implémentations d’interfaces. En effet, si un objet possède des propriétés de type interface (IList
L’implémentation de la classe InterfaceSerializer s’est avérée plus simple que prévue : dans le principe, si un type de propriété est une interface, et que la valeur de cette propriété est non nulle, le type concret, obtenu via object.GetType() est sérialisé.
Ensuite, on appelle simplement le sérializer racine, en lui substituant le type de l’interface par le type de l’instance qui l’implémente.
public override void Serialize(ExtendedBinaryWriter writer, object source, Type sourceType)
{
var st = source.GetType();
// write implemented type
writer.Write(st);
// continue with implemented type and not interface
base.Serialize(writer, source, st);
}
The source repository for this article is on Github.