ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

C# Наследование и серилизация
  #1  
Старый 05.02.2010, 15:33
dos999
Познающий
Регистрация: 15.02.2008
Сообщений: 98
Провел на форуме:
183980

Репутация: 50
По умолчанию C# Наследование и серилизация

столкнулся со следующей проблемой

есть классы
Код:
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. помогите реализовать
 
Ответить с цитированием

  #2  
Старый 05.02.2010, 17:49
arpm
Новичок
Регистрация: 06.04.2008
Сообщений: 8
Провел на форуме:
21887

Репутация: 10
По умолчанию

[XmlInclude(typeof(Camera)), XmlInclude(typeof(Hub))]
public class DeviceS
не поможет?
 
Ответить с цитированием

  #3  
Старый 05.02.2010, 18:53
dos999
Познающий
Регистрация: 15.02.2008
Сообщений: 98
Провел на форуме:
183980

Репутация: 50
По умолчанию

Цитата:
[XmlInclude(typeof(Camera)), XmlInclude(typeof(Hub))]
public class DeviceS
не поможет?
[XmlInclude(typeof(Camera))]
[XmlInclude(typeof(Hub))]
public class Device

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

Последний раз редактировалось dos999; 05.02.2010 в 18:58..
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ