C# 如何在序列化列表时创建递增的XML元素名称
我正在尝试序列化一个类似以下内容的级别对象:C# 如何在序列化列表时创建递增的XML元素名称,c#,xml-serialization,C#,Xml Serialization,我正在尝试序列化一个类似以下内容的级别对象: public class Level { //Some XmlAtributes [XmlElement] public List<Question> questions; } public class Question { //Some XmlAttributes [XmlArray("Answers")] public List<string> answers; }
public class Level
{
//Some XmlAtributes
[XmlElement]
public List<Question> questions;
}
public class Question
{
//Some XmlAttributes
[XmlArray("Answers")]
public List<string> answers;
}
<Level time="2">
<Question type="multiplechoice">
<Answers correct="b">
<a>Answer 1</a>
<b>Answer 2</b>
<c>Answer 3</c>
<d>Answer 4</d>
</Answers>
</Question>
<Question>
...
</Question>
</Level>
公共类级别
{
//一些沙丁胺醇
[XmlElement]
公开问题清单;
}
公开课问题
{
//一些XML属性
[XmlArray(“答案”)]
公开列表答案;
}
输入到和XML文件,如下所示:
public class Level
{
//Some XmlAtributes
[XmlElement]
public List<Question> questions;
}
public class Question
{
//Some XmlAttributes
[XmlArray("Answers")]
public List<string> answers;
}
<Level time="2">
<Question type="multiplechoice">
<Answers correct="b">
<a>Answer 1</a>
<b>Answer 2</b>
<c>Answer 3</c>
<d>Answer 4</d>
</Answers>
</Question>
<Question>
...
</Question>
</Level>
答复1
答复2
答复3
答复4
...
除了
下的元素名之外,我已经可以序列化它了。请注意,每个元素如何获得递增的名称,而不是所有元素都相同(例如默认情况下
)。这可能吗?我知道我可以使用[XmlArrayItem(“ItemName”)]
重命名元素,但这会将相同的名称应用于数组中的所有元素 如果有其他人遇到这种情况,下面是我的解决方案(感谢IAbstract的提示):
公共类答案:IXmlSerializable
{
公共列表=新列表();
公共字符串this[int pos]
{
收到
{
退货清单[pos];
}
设置
{
列表[pos]=值;
}
}
公共void ReadXml(XmlReader)
{
reader.ReadToDescendant(“a”);
while(reader.Name!=“Answers”)
{
if(reader.IsStartElement())
{
添加(reader.ReadElementContentAsString());
}
}
reader.Read();
}
public void WriteXml(XmlWriter)
{
for(int i=0;i
我将Answer设置为它自己的类,因为它具有属性,并且我不需要覆盖Question类中其他任何内容的序列化行为。额外的reader.Read()用于确保读取器在处理应答后移动到下一个标记,否则反序列化将不会继续
它不是100%完美,但对于我的实现来说已经足够了。我认为您必须实现
IXmlSerializable
。我不太清楚;您可能需要咬紧牙关,自己实现编辑:除非您的XML模式是固定的,否则最好只使用更好的数据模型。@Chris我考虑过这一点。最终,客户机可以使用XML随时添加和重新排列问题。因此,我正试图使它尽可能的用户友好。我曾考虑过使用Text
,最终可能会走这条路,但我很固执。现在我只是好奇这是否能做到@非常感谢你给我时间,我正在调查。