Работа с интерфейсом - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д