Работа с интерфейсом - 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);