我在C#中有一堆存储的,序列化的类(都是从基类继承的).与序列化类一起,我还存储了一个枚举值,用于标识序列化的子类.
这意味着每当我想序列化/反序列化类时,我必须使用几个基于枚举的大转换语句来决定要反序列化的子类.似乎有一种方法可以使用某种类似结构图的东西来做到这一点.(它用于小部件/仪表板,因此将来可能会出现更多子类).
现在,它看起来像这样......
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;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将枚举值映射到Func<ISerializer, string, HtmlWidget>委托:
static Dictionary<WidgetType, Func<ISerializer, string, HtmlWidget>> map =
new Dictionary<WidgetType, Func<ISerializer, string, HtmlWidget>> {
{ WidgetType.AbstractBase, (s, o) => s.Deserialize<HtmlWidget>(o) },
{ WidgetType.Widget1, (s, o) => s.Deserialize<Widget1>(o) },
// ...
};
// use it like:
return map[type](serializer, serialized);
Run Code Online (Sandbox Code Playgroud)