Skip to content

Instantly share code, notes, and snippets.

@owlscatcher
Last active July 7, 2020 09:40
Show Gist options
  • Save owlscatcher/2c236250c8288b6594e5c2e4b2449da8 to your computer and use it in GitHub Desktop.
Save owlscatcher/2c236250c8288b6594e5c2e4b2449da8 to your computer and use it in GitHub Desktop.
Еще один метод сериализации и десериализации .xml
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;
}
}
}
<?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