我想将这个XML文件导入到C#中。用C#列表导入XML#
<?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;
}
,然后将此代码导入到C#:
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);
}
但我得到一个错误,我只是不能得到解决它已经测试了许多解决方案,使其无法成功地运行。 我得到的错误是:
System.InvalidOperationException:XML文档(2,2)中存在错误。 ---> System-MethodAcessException:尝试通过方法'Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderYamahaAmplifier.Read5_YamahaAmplifier(Boolean,Boolean)'访问方法'HSPI_YAMAHA_RECEIVER.Util + YamahaAmplifier..ctor()失败。 在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderYamahaAmplifier.Read5_YamahaAmplifier(Booleanb ISNULLABLE,布尔checkType)
有什么建议?一个更好的方法呢?什么?