Как убедиться, что мой список объектов функционирует должным образом в других проектах C # после преобразования в формат XML? - PullRequest
0 голосов
/ 09 июля 2019

У меня есть список объектов, которые принадлежат пользовательскому классу «Устройство», который я сериализовал в файл XML. Класс «Устройство» имеет вложенный класс с именем «Функция».

<ArrayOfDevice xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Device>
    <Name>CellaTemp PA</Name>
<Type>DeviceX</Type>
<Station>2</Station>
<Function>
  <Name>Function1</Name>
</Function>
  </Device>
  <Device>
    <Name>EKU1 KR</Name>
    <Type>DeviceY</Type>
    <Station>1</Station>
    <Function>
  <Name>Function2</Name>
</Function>

Теперь я хочу открыть этот файл XML "/.../DevicesXML" в новом решении C # и десериализовать его в список, состоящий из объектов класса "Device".

Как правильно загрузить файл? Какие команды и «использующие» .namespaces мне нужны?

Должен ли я определять классы в новом решении, как в исходном?

Класс «Устройство» был определен следующим образом:

[Serializable()]
public class Device
{
    public string Name { get; set; }
    public string Type { get; set; }
    public int Station { get; set; }
    public Function func{ get; set; }

    [Serializable()]
    public class Function
    {
        public string Name { get; set; }

        public Function() { }
        public Function(string name = "No Name")
        {
            Name = name;
        }

        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("Name", Name);
        }

        public Function(SerializationInfo info, StreamingContext context)
        {
            Name = (string)info.GetValue("Name", typeof(string));
        }
    }
        public Device() { }
    public Device(string name = "No Name", string type = "No type", int station = 0, 
        string sname="No Name", string sfeat="Nothing")
    {
        Name = name;
        Type = type;
        Station = station;
        Func1= new Function(sname, sfeat);
    }

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("Name", Name);
        info.AddValue("Type", Type);
        info.AddValue("Station", Station);
        info.AddValue("Func1", Func1);
    }

    public Device(SerializationInfo info, StreamingContext context)
    {
        Name = (string)info.GetValue("Name", typeof(string));
        Type = (string)info.GetValue("Type", typeof(string));
        Station = (int)info.GetValue("Station", typeof(double));
        Func1= (Function)info.GetValue("Func1", typeof(Function));
    }
}    

1 Ответ

0 голосов
/ 09 июля 2019

Вы можете использовать Xml.Serialization

Вот минимальный рабочий образец:

namespace ConsoleApp1
{
    [Serializable]
    public class Device
    {
        public string Name { get; set; }
        public string Type { get; set; }
        public int Station { get; set; }
        public Function Function { get; set; }
    }

    [Serializable]
    public class Function
    {
        public string Name { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var file = "<some_path>";
            using (var reader = new StreamReader(file))
            {
                var devices = (List<Device>)new XmlSerializer(typeof(List<Device>)).Deserialize(reader);

                // do something with devices.
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...