Как составить список из десериализации XML - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть файл XML со многими устройствами и множеством слотов. Мне нужно составить списки обоих. Я пытаюсь использовать тип устройства, но оно всегда равно нулю.

<?xml version="1.0" encoding="UTF-8"?>
<DataFileSetup>
    <System Name="Local">
        <SysInfo>
            <Software>
                <VersionCreated>X3 SP5 (RELEASE-181228) (64-bit)</VersionCreated>
                <VersionModifed>X3 SP5 (RELEASE-181228) (64-bit)</VersionModifed>
                <License_Type>Professional</License_Type>
            </Software>
         </SysInfo>
         <DewesoftSetup>
            <Devices>
                <StartStoreTime>43874.6969328704</StartStoreTime>
                <SampleRate>50000</SampleRate>
                <BlockSize>1000</BlockSize>
                <IBRate>10</IBRate>
                <AAFsr>21000</AAFsr>
                <MaxSampling>200000</MaxSampling>
                <Device Type="AI">
                    <Slot Index="0">
                        <MeasuredValue>VOLTAGE</MeasuredValue>
                        <Range>10 V</Range>
                        <LPFilter_Type>BU</LPFilter_Type>
                        <LPFilter_Hz>10000</LPFilter_Hz>
                        <LPFilter_Order>2</LPFilter_Order>
                        <HPFilter_Hz>1</HPFilter_Hz>
                        <OutMathChEnabled>8;1;0;0;0;0;0;0;0</OutMathChEnabled>
                   </Slot>
                </Device>
                <Device Type="DI">
                 ....
                </Device>
            </Devices>
        </DewesoftSetup>
  </System>
</DataFileSetup>
   public static void readXML()
   {
      string deviceType;
      XmlReader reader = XmlReader.Create(DewesoftCard.xmlFileName);

      reader.ReadToFollowing("DeviceName");
      reader.Read();
      deviceType = reader.Value;

      reader.ReadToFollowing("DewesoftSetup");

      if (deviceType == "SIRIUSi")
      {
         XmlSerializer serializer = new XmlSerializer(typeof(DewesoftSiriusDevices));
         DewesoftSiriusDevices setupSirius = (DewesoftSiriusDevices)serializer.Deserialize(reader);
      }
      else if (deviceType == "KRYPTONi TH")
      {
         XmlSerializer serializer = new XmlSerializer(typeof(DewesoftKryptonDevices));
         DewesoftKryptonDevices setupKrypton = (DewesoftKryptonDevices)serializer.Deserialize(reader);
      }
   }
[XmlRoot(ElementName = "DewesoftSetup")]
public class DewesoftSiriusDevices
{
   [XmlElement(ElementName ="Devices")]
   public DewesoftSiriusSetup dewesoftSiriusSetup { get; set; }
   [XmlElement(ElementName = "Device")]
   public List<DeviceType> deviceType { get; set; }

};

[XmlRoot(ElementName = "DewesoftSetup")]
public class DewesoftKryptonDevices
{
   [XmlElement(ElementName = "Devices")]
   public DewesoftKryptonSetup dewesoftKryptonSetup { get; set; }
   [XmlElement(ElementName = "Device")]
   public List<DeviceType> deviceType { get; set; }
};

public class DewesoftSiriusSetup
{
   public double StartStoreTime;
   public int SampleRate;
   public int IBRate;
   public int AAFsr;
   public int MaxSampling;
};

public class DewesoftKryptonSetup
{
   public double StartStoreTime;
   public int SampleRate;
   public int BlockSize;
   public int IBRate;
   public int MaxSampling;
};

public class DeviceType
{
   [XmlAttribute(AttributeName = "Type")]
   public string type;
};

dewesoftSiriusSetup или dewesoftKryptonSetup заполнены правильно.

Есть ли что-то, чего мне не хватает в код? Наряду с типом устройства, внутри него мне также нужны разные слоты в виде списка, но я не дошел до этого, так как я чувствую, что, если я выясню устройство, оно будет таким же для слотов

...