C# Наследование и серилизация

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by dos999, 5 Feb 2010.

  1. dos999

    dos999 Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    137
    Likes Received:
    24
    Reputations:
    0
    столкнулся со следующей проблемой

    есть классы
    Code:
    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
    Code:
    public class Camera : Device
    {
            public override Boolean Connect() 
            {
               /*тут какой то код*/
            }
    }
    
    public class Hub : Device
    {
            public override Boolean Connect() 
            {
               /*тут какой то код*/
            }
    }
     
    мне нужно сохранять и загружать из XMLя класс DeviceS. Делаю я это так:
    Code:
           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. помогите реализовать
     
  2. arpm

    arpm New Member

    Joined:
    6 Apr 2008
    Messages:
    8
    Likes Received:
    4
    Reputations:
    4
    [XmlInclude(typeof(Camera)), XmlInclude(typeof(Hub))]
    public class DeviceS
    не поможет?
     
    1 person likes this.
  3. dos999

    dos999 Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    137
    Likes Received:
    24
    Reputations:
    0
    [XmlInclude(typeof(Camera))]
    [XmlInclude(typeof(Hub))]
    public class Device

    вот так вот заработало... + ко всему у меня олин из дочерних классов был приват, исправил на паблик и всё запахало. большое спасибо
     
    #3 dos999, 5 Feb 2010
    Last edited: 5 Feb 2010