Работа с интерфейсом - C# (190376)

Узнай цену своей работы

Формулировка задачи:

Всем привет, есть несколько структур они связанны друг с другом через интерфейсы, некоторые структуры наследуются от нескольких интерфейсов, так вот как можно сериализовать такую структуру или обойтись без интерфейсов, но не поломав структуру, конечно, можно перейти к классам вместо интерфейсов, но наследование от нескольких классов невозможна.
пример кода
public interface ITag
    {
        string Name { get; set; }
        string SystemName { get; }
    }
 
    public interface ISignal
    {
    }
 
    public interface IRegister
    {
    }
 
    public interface IGroup
    {
        string Name { get; set; }
        string SystemName { get; }
        Type GetType { get; }
    }
 
    public interface IDevice
    {
    }
 
    public interface IServer
    {
    }
 
    public interface INode
    {
        string Name { get; set; }
        string SystemName { get; }
        Type GetType { get; }
    }
 
    [Serializable]
    public struct Server : IServer
    {
        public string Name;
        public string SystemName;
        public List<INode> Nodes;
 
        public Server(string name, List<INode> node)
        {
            Name = name;
            Nodes = node;
            SystemName = "Server";
        }
    }
 
    [Serializable]
    public struct TCP : INode
    {
        public string IPAddress;
        public int Port;
        public List<IDevice> Devices;
        public string Name { get; set; }
        public string SystemName { get; }
 
        public TCP(string name, string ip, int port, List<IDevice> devices)
        {
            Name = name;
            IPAddress = ip;
            Port = port;
            Devices = devices;
            SystemName = "Node";
        }
 
        public Type GetType
        {
            get { return typeof(TCP); }
        }
    }
 
    [Serializable]
    public struct RTU : INode
    {
        public string Name { get; set; }
        public string SystemName { get; }
        public string Port;
        public int SpeedRate;
        public int DataBits;
        public int StopBits;
        public Parity Parity;
        public List<IDevice> Devices;
 
        public RTU(string name, int sr, int db, int sb, Parity par, string port, List<IDevice> devices)
        {
            Name = name;
            Port = port;
            SpeedRate = sr;
            StopBits = sb;
            DataBits = db;
            Devices = devices;
            Parity = par;
            SystemName = "Node";
        }
 
        public Type GetType
        {
            get { return typeof(RTU); }
        }
    }
 
    [Serializable]
    public struct Device : IDevice
    {
        public int Address;
        public string Name;
        public List<IGroup> Groups;
        public string SystemName;
 
        public Device(int address, string name, List<IGroup> groups)
        {
            Address = address;
            Groups = groups;
            Name = name;
            SystemName = "Device";
        }
 
        public static Type GetType
        {
            get { return Device.GetType; }
        }
 
        public Type DeviceType
        {
            get { return Groups[0].GetType(); }
        }
    }
 
    [Serializable]
    public struct Group : IGroup
    {
        public List<ITag> Tags;
        public string Name { get; set; }
        public string SystemName { get; }
 
        public Group(string name, List<ITag> tags)
        {
            Tags = tags;
            Name = name;
            SystemName = "Group";
        }
 
        public Type GetType
        {
            get { return typeof(Group); ; }
        }
        
    }
 
    [Serializable]
    public struct Tag : ITag, IGroup
    {
        public int Id;
        public ISignal Signal;
        public TypeData Data;
        public TypeModbus TypeModbus;
        public object Value;
        public DateTime Time;
        public string Name { get; set; }
        public string SystemName { get; }
 
        public Tag(int id, ISignal signal, TypeData data, TypeModbus typeModbus, object value,string n, DateTime time)
        {
            Id = id;
            Signal = signal;
            Data = data;
            TypeModbus = typeModbus;
            Value = value;
            Time = time;
            Name = n;
            SystemName = "Tag";
        }

        public Type GetType
        {
            get { return typeof(Tag); }
        }
        
    }
 
    [Serializable]
    public struct Analog : ISignal
    {
        public int Address;
        public int Address_validaty;
        public float MinWarning;
        public float MinEmergency;
        public float MaxWarning;
        public float MaxEmergency;
        public bool Control;
        public float Coeficient;
        public float Shift;
        public bool IsCoeficient;
        public string MinWText;
        public string MinEText;
        public string MaxWText;
        public string MaxEText;
 
    }
 
    [Serializable]
    public struct Discrete : ISignal
    {
        public int Address;
        public int Address_validaty;
        public bool IsAutomat;
        public static ITag Tag = null;
        public string TrueText;
        public string FalseText;
        public Discrete(int ad, int adv,  bool isautomat, string ft, string tt, ITag tag = null)
        {
            Address = ad;
            Address_validaty = adv;
            TrueText = tt;
            FalseText = ft;
            IsAutomat = isautomat;
 
            if (isautomat)
                Tag = tag;
        }
 
        public static Type GetType
        {
            get { return Discrete.GetType; }
        }
 
    }
 
    [Serializable]
    public struct Managment : ISignal
    {
        public ITag ConnectionRegister;
        public int Address;
        public int SecondsReply;
 
        public static Type GetType
        {
            get { return Managment.GetType; }
        }
    }
Проблема решена бинарной сериализацией, но если есть способы для xml, json, то подскажите как это делать

Решение задачи: «Работа с интерфейсом»

textual
Листинг программы
string serialized = JsonConvert.Serialize(something);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.727 из 5
Похожие ответы