C# 使用具有变量名的项反序列化数组

C# 使用具有变量名的项反序列化数组,c#,xml,deserialization,C#,Xml,Deserialization,我需要反序列化下面的XML示例,在尝试了一整天之后,我没有成功 问题是元素名称不同,即使它们引用相同的原型 最好的方法是什么 <Test Name="SomeName"> <OBJECTS NbObjects="2"> <OBJECT0 ObjectName="ObjName1"> <COMMAND NbCommand="3"> <COMMAND0 Command

我需要反序列化下面的XML示例,在尝试了一整天之后,我没有成功

问题是元素名称不同,即使它们引用相同的原型

最好的方法是什么

<Test Name="SomeName">
    <OBJECTS NbObjects="2">
        <OBJECT0 ObjectName="ObjName1">
            <COMMAND NbCommand="3">
                <COMMAND0 CommandLabel="Command_A" CommandFileName="File1"/>
                <COMMAND1 CommandLabel="Command_B" CommandFileName="File2"/>
                <COMMAND2 CommandLabel="Command_C" CommandFileName="File3"/>
            </COMMAND>
        </OBJECT0>
        <OBJECT1 ObjectName="ObjName2">
            <COMMAND NbCommand="8">
                <COMMAND0 CommandLabel="MyCommand1" CommandFileName="File1"/>
                <COMMAND1 CommandLabel="MyCommand2" CommandFileName="File2"/>
                <COMMAND2 CommandLabel="MyCommand3" CommandFileName="File3"/>
                <COMMAND3 CommandLabel="MyCommand4" CommandFileName="File4"/>
                <COMMAND4 CommandLabel="MyCommand5" CommandFileName="File5"/>
                <COMMAND5 CommandLabel="MyCommand6" CommandFileName="File6"/>
                <COMMAND6 CommandLabel="MyCommand7" CommandFileName="File7"/>
                <COMMAND7 CommandLabel="MyCommand8" CommandFileName="File8"/>
            </COMMAND>
        </OBJECT1>
    </OBJECTS>
</Test>

这是我正在尝试的c#代码,运气不好:

using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;

namespace XMLtest
{
    [XmlRoot("Test")]
    public class Test
    {
        [XmlAttribute("Name")]
        public string Name { get; set; }
        [XmlElement("OBJECTS")]
        public Objects objects { get; set; }

        public void Load(string filename)
        {
            XmlSerializer xs = new XmlSerializer(typeof (Test));
            using (StreamReader rd = new StreamReader(filename))
            {
                Test test = xs.Deserialize(rd) as Test;
            }
        }
    }

    public class Objects
    {
        [XmlAttribute("NbObjects")]
        public int NbObjects { get; set; }
        [XmlArray]
        [XmlArrayItem(typeof(Object))]
        public List<Object> ObjectList { get; set; }

        public Objects()
        {
            ObjectList = new List<Object>();
        }
    }

    public class Object
    {
        [XmlAttribute("ObjectName")]
        public string ObjectName { get; set; }

        [XmlElement("COMMAND")]
        public Commands Cmds { get; set; }
    }

    public class Commands
    {
        [XmlAttribute("NbCommand")]
        public int NbCommand { get; set; }

        [XmlArray("COMMAND")]
        [XmlArrayItem("COMMAND")]
        public List<Command> CommandList { get; set; }

        public Commands()
        {
            CommandList = new List<Command>();
        }
    }

    public class Command
    {
        [XmlAttribute("CommandLabel")]
        public string CommandLabel { get; set; }

        [XmlAttribute("CommandFileName")]
        public string CommandFileName { get; set; }
    }
}
使用System.Collections.Generic;
使用System.IO;
使用System.Xml.Serialization;
命名空间XMLtest
{
[XmlRoot(“测试”)]
公开课考试
{
[XmlAttribute(“名称”)]
公共字符串名称{get;set;}
[XmlElement(“对象”)]
公共对象对象{get;set;}
公共无效加载(字符串文件名)
{
XmlSerializer xs=新的XmlSerializer(typeof(Test));
使用(StreamReader rd=新的StreamReader(文件名))
{
Test Test=xs.反序列化(rd)为Test;
}
}
}
公共类对象
{
[XmlAttribute(“NbObjects”)]
公共对象{get;set;}
[XmlArray]
[XmlArrayItem(typeof(Object))]
公共列表对象列表{get;set;}
公共对象()
{
ObjectList=新列表();
}
}
公共类对象
{
[XmlAttribute(“ObjectName”)]
公共字符串ObjectName{get;set;}
[XmlElement(“命令”)]
公共命令Cmds{get;set;}
}
公共类命令
{
[XmlAttribute(“NbCommand”)]
public int NbCommand{get;set;}
[XmlArray(“命令”)]
[XmlArrayItem(“命令”)]
公共列表命令列表{get;set;}
公共命令()
{
CommandList=新列表();
}
}
公共类命令
{
[XmlAttribute(“CommandLabel”)]
公共字符串CommandLabel{get;set;}
[XmlAttribute(“CommandFileName”)]
公共字符串CommandFileName{get;set;}
}
}

我的建议是不要使用
等等。这些是不同的标签,表示不同的项目/对象


如果号码对您很重要,请将项目更改为
。这将使您能够根据id对它们进行排序或识别,并且所有标签都是相同类型的。

感谢您花时间回答。但我没有生成这个“坏”XML,需要对其进行解析。顺便说一句,物体的数量增加到72个!因此,我非常希望避免使用72个不同的类来反序列化它