C# 使用C语言中的列表导入XML#

C# 使用C语言中的列表导入XML#,c#,xml,list,import,C#,Xml,List,Import,我想将这个XML文件导入C# 但我遇到了一个错误,我就是无法摆脱它,我一直在测试一些解决方案,以使其工作没有成功。 我得到的错误是: System.InvalidOperationException:XML文档(2,2)中存在错误。-->系统方法异常:尝试通过方法“Microsoft.Xml.Serialization.GeneratedAssembly.xmlSerializationReaderyAmahaAmplier.Read5_YamahaAmplier(布尔,布尔)”访问方法“HSP

我想将这个XML文件导入C#

但我遇到了一个错误,我就是无法摆脱它,我一直在测试一些解决方案,以使其工作没有成功。 我得到的错误是:

System.InvalidOperationException:XML文档(2,2)中存在错误。-->系统方法异常:尝试通过方法“Microsoft.Xml.Serialization.GeneratedAssembly.xmlSerializationReaderyAmahaAmplier.Read5_YamahaAmplier(布尔,布尔)”访问方法“HSPI_YAMAHA_RECEIVER.Util+YamahaAmplier..ctor()失败。 在Microsoft.Xml.Serialization.GeneratedAssembly.xmlSerializationReaderyAmahaAmplier.Read5_YamahaAmplier(Booleanb可为空,布尔校验类型)


有什么建议吗?有更好的方法吗?有什么吗?

谢谢,如果我创建了一个新项目,只需输入我发布的代码和您的更改,您的修复程序就可以正常工作。但它在我原来的程序中不起作用。我将不得不继续收集信息来描述这个问题



从测试程序中复制粘贴它使其正常工作,只有一个例外。我在测试程序中输入了一些类似于root.root[1].Devices.Count()的内容,这在那里起到了作用。但是,当复制回原始程序时,我必须删除(),因为它不是一个方法。

好的,所以现在我导入了一个我想要使用的漂亮整洁的信息结构。我的程序的一部分使用结构中的所有信息来创建用户界面。程序的另一部分必须决定在按下其中一个按钮或更换切片时该怎么做。后一部分自动获取三条信息,我无法更改执行此操作的代码。我得到的信息是“Parameter”类下的“RootName”、“DeviceName”和“Number”

所以我需要做的是搜索匹配项RootName,然后在匹配项下搜索DeviceName,并在“PUTCMD”中获取DeviceNames字符串,然后添加与我得到的数字对应的参数名

有没有聪明的方法?在正确的根目录下找到正确的设备,然后从中取出数据以创建我的传输字符串

非常感谢在正确方向上的任何帮助

<?xml version="1.0" encoding="UTF-8"?>
<YamahaAmplifier>
<Root>
  <RootName>SYS</RootName>
  <UseRoot>YES</UseRoot>
  <Device>
    <DeviceName>MODELNAME</DeviceName>
    <UseFunction>YES</UseFunction>
    <GETCMD>@SYS:MODELNAME=?</GETCMD>
    <Parameter>
      <Number>1</Number>
      <Type>SINGLEVAL</Type>
      <Name>Character Code: Ascii, Variable Length (1 to 16 characters)</Name>
    </Parameter>
  </Device>
  <Device>
    <DeviceName>SPPATTERN1AMP</DeviceName>
    <UseFunction>YES</UseFunction>
    <PUTCMD>@SYS:SPPATTERN1AMP=</PUTCMD>
    <GETCMD>@SYS:SPPATTERN1AMP=?</GETCMD>
    <Parameter>
      <Number>1</Number>
      <Type>SINGLEVAL</Type>
      <Name>7ch Normal</Name>
    </Parameter>
    <Parameter>
      <Number>2</Number>
      <Type>SINGLEVAL</Type>
      <Name>7ch +1ZONE</Name>
    </Parameter>
    <Parameter>
      <Number>3</Number>
      <Type>SINGLEVAL</Type>
      <Name>7ch +2ZONE</Name>
    </Parameter>
    <Parameter>
      <Number>4</Number>
      <Type>SINGLEVAL</Type>
      <Name>7ch +FRONT</Name>
    </Parameter>
    <Parameter>
      <Number>5</Number>
      <Type>SINGLEVAL</Type>
      <Name>7ch +FPR</Name>
    </Parameter>
  </Device>
 </Root>
 <Root>
  <RootName>SYS2</RootName>
  <UseRoot>YES</UseRoot>
  <Device>
    <DeviceName>MODELNAME2</DeviceName>
    <UseFunction>YES</UseFunction>
    <GETCMD>@SYS:MODELNAME=?</GETCMD>
    <Parameter>
      <Number>1</Number>
      <Type>SINGLEVAL</Type>
      <Name>Character Code: Ascii, Variable Length (1 to 16 characters)</Name>
    </Parameter>
  </Device>
  <Device>
    <DeviceName>SPPATTERN1AMP2</DeviceName>
    <UseFunction>YES</UseFunction>
    <PUTCMD>@SYS:SPPATTERN1AMP=</PUTCMD>
    <GETCMD>@SYS:SPPATTERN1AMP=?</GETCMD>
    <Parameter>
      <Number>1</Number>
      <Type>SINGLEVAL</Type>
      <Name>7ch Normal</Name>
    </Parameter>
    <Parameter>
      <Number>2</Number>
      <Type>SINGLEVAL</Type>
      <Name>7ch +1ZONE</Name>
    </Parameter>
    <Parameter>
      <Number>3</Number>
      <Type>SINGLEVAL</Type>
      <Name>7ch +2ZONE</Name>
    </Parameter>
  </Device>
 </Root>
</YamahaAmplifier>
[Serializable, XmlRoot("YamahaAmplifier")]
public class YamahaAmplifier
{
    [XmlArray(ElementName = "Root")]
    public List<Root> Roots = new List<Root>();
}

[Serializable()]
public class Root
{
    [XmlElement("RootName")]
    public string RootName;
    [XmlElement("UseRoot")]
    public string UseRoot;
    [XmlArray("Device")]
    public List<Device> Devices = new List<Device>();
}

[Serializable()]
public class Device
{
    [XmlElement("DeviceName")]
    public string DeviceName;
    [XmlElement("UseFunction")]
    public string UseFunction;
    [XmlElement("GETCMD")]
    public string GETCMD;
    [XmlElement("PUTCMD")]
    public string PUTCMD;
    [XmlArray("Parameter")]
    public List<Parameter> Parameters = new List<Parameter>();
}

[Serializable()]
public class Parameter
{
    [XmlElement("Number")]
    public int Number;
    [XmlElement("Type")]
    public string Type;
    [XmlElement("Name")]
    public string Name;
}
            try
            {
                using (FileStream reader = new FileStream("C:\\Civview\\YNCA_Command_List_RX-A3000_U.xml", FileMode.Open))
                {
                    XmlSerializer ser = new XmlSerializer(typeof(YamahaAmplifier));
                    o = ser.Deserialize(reader) as YamahaAmplifier;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }