我有以下场景:我说过一个Vehicle类,每个车辆组件都有几个字段:
public WheelBase Wheels;
public EngineBase Engine;
public TrainBase DriveTrain;
对于每个汽车组件,有几个类继承自基类,例如我们可能有:V8Engine:EngineBase,V6Engine:EngineBase,I6Engine:EngineBase,依此类推。
如果我想在标准数据库(例如文本文件)中保存汽车的装载,并且当我需要装载汽车时,我需要知道应该装载哪个“子类型”的组件。例如,我想加载一辆装有V6Engine的汽车:EngineBase,SummerTireWheel:WheelBase,ManualTrain:TrainBase。
存储和检索此信息的最佳方法是什么?我能想到的唯一方法是在数据库中保存“子类型”的名称,并使用一组开关来创建正确类型的组件,例如:
switch(EngineType)
{
case "V8Engine" :
Engine = new V8Engine();
break;
case "V6Engine" :
Engine = new V6Engine();
break;
case "I6Engine" :
Engine = new I6Engine();
break;
}
这种方法当然有效,但我觉得它非常难看。是否有更优雅的方式来处理这种情况?
答案 0 :(得分:1)
我认为最好的方法是使用XML序列化和反序列化
XmlSerializer serializer = new XmlSerializer(typeof(List<MyClass>));
using(FileStream stream = File.OpenWrite("filename"))
{
List<MyClass> list = new List<MyClass>();
serializer.Serialize(stream, list);
}
using(FileStream stream = File.OpenRead("filename"))
{
List<MyClass> dezerializedList =
(List<MyClass>) serializer.Deserialize(stream);
}
另请参阅此链接:XML - Can not deserialize after serialize(如何使用继承进行序列化和反序列化)