PDA

Просмотр полной версии : C# Наследование и серилизация


dos999
05.02.2010, 15:33
столкнулся со следующей проблемой

есть классы

public class Device
{
public string ConnectionString;
public int Type;
public virtual Boolean Connect()
{return false;}
}

public class DeviceS
{
public Guid SGuid;
[XmlArrayItem("Device", typeof(Device))]
public ArrayList Items;
}

и есть 2 класса наследованные от Device

public class Camera : Device
{
public override Boolean Connect()
{
/*тут какой то код*/
}
}

public class Hub : Device
{
public override Boolean Connect()
{
/*тут какой то код*/
}
}


мне нужно сохранять и загружать из XMLя класс DeviceS. Делаю я это так:

public DeviceS Load()
{
FileStream fStream = null;
XmlSerializer xmlFormat = new XmlSerializer(typeof(Devices));
try
{
fStream = new FileStream(XML_FILE_NAME, FileMode.Open,
FileAccess.Read, FileShare.None);
DeviceS LDeviceS = new DeviceS();
LDeviceS = (DeviceS)xmlFormat.Deserialize(fStream);
fStream.Close();
return LDeviceS;
}
catch
{
return false;
}
}

public bool Save(DeviceS LDeviceS)
{
XmlSerializer xmlFormat = new XmlSerializer(typeof(DeviceS));
FileStream fStream = new FileStream(XML_FILE_NAME, FileMode.Create,
FileAccess.Write, FileShare.None);
xmlFormat.Serialize(fStream, LDeviceS);
fStream.Close();
return true;
}


проблема в том что DeviceS.Items должен содержать не родителя Device а потомков Camera и/или Hub. помогите реализовать

arpm
05.02.2010, 17:49
[XmlInclude(typeof(Camera)), XmlInclude(typeof(Hub))]
public class DeviceS
не поможет?

dos999
05.02.2010, 18:53
[XmlInclude(typeof(Camera)), XmlInclude(typeof(Hub))]
public class DeviceS
не поможет?

[XmlInclude(typeof(Camera))]
[XmlInclude(typeof(Hub))]
public class Device

вот так вот заработало... + ко всему у меня олин из дочерних классов был приват, исправил на паблик и всё запахало. большое спасибо