J'ai un tas de classes sérialisées stockées (qui héritent toutes d'une classe de base) en C#. En plus de la classe sérialisée, je stocke également une valeur enum qui identifie la sous-classe which sérialisée.Activer le type de classe en C#
Cela signifie que chaque fois que je veux sérialiser/désérialiser la classe, je dois utiliser quelques grandes instructions de commutation basées sur l'énumération pour décider de la sous-classe à désérialiser. Il semble qu'il y aurait un moyen de le faire en utilisant une sorte de chose structurelle. (Son pour un widget/tableau de bord, il est donc tout à fait possible que beaucoup plus de sous-classes apparaîtront dans le futur).
En ce moment, ça ressemble à ça ...
widget = DeserializeFromDb(GetWidgetType(widgetrow.WidgetType), widgetRow.serializedWidget);
private HtmlWidget DeserializeFromDb(WidgetType type, string serialized)
{
Basics.Serial.IStringSerializer serializer = Basics.Serial.BinarySerializer.GetInstance();
switch (type)
{
case WidgetType.AbstractBase:
return serializer.Deserialize<HtmlWidget>(serialized);
break;
case WidgetType.Widget1:
return serializer.Deserialize<Widget1>(serialized);
break;
case WidgetType.Widget2:
return serializer.Deserialize<Widget2>(serialized);
break;
}
}