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