Last active
July 7, 2020 09:40
-
-
Save owlscatcher/2c236250c8288b6594e5c2e4b2449da8 to your computer and use it in GitHub Desktop.
Еще один метод сериализации и десериализации .xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.IO; | |
using System.Linq; | |
using System.Xml.Serialization; | |
namespace CONSOLE_TEST_SOLUTION | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
string filePath = ("" + Directory.GetCurrentDirectory() + "\\server-list-1.xml"); | |
// Вызов десериализации | |
var desServers = DeserializeServers(filePath); | |
// Получаем конкретный сервер | |
var anyServer = desServers.FirstOrDefault(s => s.Name == "Server-3"); | |
// Получаем по конкретному адресу девайс | |
foreach(var ser in desServers) | |
{ | |
bool isExist = false; | |
if(ser.Name == "Server-3") | |
{ | |
foreach(var dev in ser.Devices) | |
{ | |
if (dev.Address == 1) | |
{ | |
Console.WriteLine($"address: {dev.Address}; mode: {dev.Mode}; active: {dev.IsActive}"); | |
isExist = true; | |
break; | |
} | |
} | |
} | |
if (isExist) | |
break; | |
} | |
// Выводим весь список | |
foreach(var ser in desServers) | |
{ | |
Console.WriteLine(ser.Name); | |
foreach(var dev in ser.Devices) | |
{ | |
Console.WriteLine($"address: {dev.Address}; mode: {dev.Mode}; active: {dev.IsActive}"); | |
} | |
} | |
Console.ReadKey(); | |
} | |
// Метод Сериализации | |
public static void SerializeServers(List<Server> servers, string filePath) | |
{ | |
XmlSerializer formatter = new XmlSerializer(typeof(List<Server>)); | |
using (FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate)) | |
{ | |
formatter.Serialize(fileStream, servers); | |
} | |
} | |
// Метод Десериализации | |
public static List<Server> DeserializeServers(string filePath) | |
{ | |
List<Server> servers = new List<Server>(); | |
XmlSerializer formatter = new XmlSerializer(typeof(List<Server>)); | |
using (FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate)) | |
{ | |
servers = (List<Server>)formatter.Deserialize(fileStream); | |
} | |
return servers; | |
} | |
} | |
// Структура для Девайсов | |
[Serializable] | |
public class Device | |
{ | |
public byte Address { get; set; } | |
public byte Mode { get; set; } | |
public bool IsActive { get; set; } | |
public Device() { } | |
public Device(byte address, byte mode, bool isActive) | |
{ | |
Address = address; | |
Mode = mode; | |
IsActive = isActive; | |
} | |
} | |
// Структура для Серверов | |
[Serializable] | |
public class Server | |
{ | |
public string Name { get; set; } | |
public List<Device> Devices { get; set; } | |
public Server() { } | |
public Server(string name) | |
{ | |
Name = name; | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0"?> | |
<ArrayOfServer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xmlns:xds="http://www.w3.org/2001/XMLSchema"> | |
<Server> | |
<Name>Server-3</Name> | |
<Devices> | |
<Device> | |
<Address>1</Address> | |
<Mode>1</Mode> | |
<IsActive>true</IsActive> | |
</Device> | |
<Device> | |
<Address>2</Address> | |
<Mode>2</Mode> | |
<IsActive>true</IsActive> | |
</Device> | |
<Device> | |
<Address>3</Address> | |
<Mode>1</Mode> | |
<IsActive>true</IsActive> | |
</Device> | |
<Device> | |
<Address>4</Address> | |
<Mode>2</Mode> | |
<IsActive>true</IsActive> | |
</Device> | |
<Device> | |
<Address>5</Address> | |
<Mode>1</Mode> | |
<IsActive>true</IsActive> | |
</Device> | |
<Device> | |
<Address>6</Address> | |
<Mode>2</Mode> | |
<IsActive>true</IsActive> | |
</Device> | |
<Device> | |
<Address>7</Address> | |
<Mode>1</Mode> | |
<IsActive>true</IsActive> | |
</Device> | |
<Device> | |
<Address>8</Address> | |
<Mode>2</Mode> | |
<IsActive>true</IsActive> | |
</Device> | |
<Device> | |
<Address>9</Address> | |
<Mode>1</Mode> | |
<IsActive>true</IsActive> | |
</Device> | |
<Device> | |
<Address>10</Address> | |
<Mode>1</Mode> | |
<IsActive>true</IsActive> | |
</Device> | |
<Device> | |
<Address>11</Address> | |
<Mode>1</Mode> | |
<IsActive>true</IsActive> | |
</Device> | |
<Device> | |
<Address>12</Address> | |
<Mode>1</Mode> | |
<IsActive>true</IsActive> | |
</Device> | |
<Device> | |
<Address>13</Address> | |
<Mode>1</Mode> | |
<IsActive>true</IsActive> | |
</Device> | |
<Device> | |
<Address>14</Address> | |
<Mode>1</Mode> | |
<IsActive>true</IsActive> | |
</Device> | |
<Device> | |
<Address>15</Address> | |
<Mode>1</Mode> | |
<IsActive>true</IsActive> | |
</Device> | |
<Device> | |
<Address>16</Address> | |
<Mode>1</Mode> | |
<IsActive>true</IsActive> | |
</Device> | |
</Devices> | |
</Server> | |
</ArrayOfServer> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment