Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在序列化列表时创建递增的XML元素名称_C#_Xml Serialization - Fatal编程技术网

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
,最终可能会走这条路,但我很固执。现在我只是好奇这是否能做到@非常感谢你给我时间,我正在调查。