У меня есть базовый класс, например:
public class Sensor
{
public void Serialize(string path)
{
try
{
System.Xml.Serialization.XmlSerializer xml = new System.Xml.Serialization.XmlSerializer(this.GetType());
using (System.IO.StreamWriter file = new System.IO.StreamWriter(System.IO.Path.GetFullPath(path)))
{
xml.Serialize(file, this);
}
}
catch (Exception e)
{
;
}
}
public static T Deserialize<T>(string path)
{
T loaded = default(T);
try
{
System.Xml.Serialization.XmlSerializer deserializer = new System.Xml.Serialization.XmlSerializer(typeof(T));
using (StreamReader reader = new StreamReader(path))
{
loaded = (T)deserializer.Deserialize(reader);
}
}
catch (Exception e)
{
;
}
return loaded;
}
}
Затем у меня есть пара классов, которые вытекают из этого:
public TemperatureSensor : Sensor {}
public PositionSensor :Sensor{}
Они имеют некоторые общие интерфейсы, но также реализуют вещи по-разному,У меня есть SensorController
, который содержит List<Sensor>
со смесью разных датчиков.Я хочу сохранить их в XML-файлы и впоследствии загрузить их.
Я попробовал простое:
public void Load()
{
var files = Directory.GetFiles(directory, "*.xml");
foreach(var file in files)
{
var p = CodePuzzle.Deserialize<Puzzle>(file);
}
}
Проблема в том, что, когда десериализатор находит <PositionSensor>
, он падает (Unexpected <PositionSensor> at 2,2
) .. Я думаю, это ожидало <Sensor>
Как это можно сделать ??Загрузка каждого датчика в подкласс, в котором он изначально хранился