将XML数据加载到XNA时出现问题

时间:2011-01-03 13:27:21

标签: xml xna

我正在尝试使用XML文件存储我的高分,这是我的高分类

[Serializable]
public struct HighScoreData {
    public string[] PlayerName;
    public int[] Score;
    public int[] Level;

    public int Count;

    public HighScoreData(int count) {
        PlayerName = new string[count];
        Score = new int[count];
        Level = new int[count];

        Count = count;
    }
}

这是我的XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<XnaContent>
<!-- TODO: replace this Asset with your own XML asset data. -->
<Asset Type="Cellular.HighScoreData">
        <PlayerName>
            <Item>1</Item>
            <Item>2</Item>
            <Item>3</Item>
            <Item>4</Item>
            <Item>5</Item>
            <Item>6</Item>
            <Item>7</Item>
            <Item>8</Item>
            <Item>9</Item>
            <Item>10</Item>
        </PlayerName>
        <Score>
            <Item>1</Item>
            <Item>2</Item>
            <Item>3</Item>
            <Item>4</Item>
            <Item>5</Item>
            <Item>6</Item>
            <Item>7</Item>
            <Item>8</Item>
            <Item>9</Item>
            <Item>10</Item>
        </Score>
        <Level>
            <Item>1</Item>
            <Item>2</Item>
            <Item>3</Item>
            <Item>4</Item>
            <Item>5</Item>
            <Item>6</Item>
            <Item>7</Item>
            <Item>8</Item>
            <Item>9</Item>
            <Item>10</Item>
        </Level>
        <Count>10</Count>
</Asset>

这是我从XML加载数据的方法

    public void LoadStoredHighScore() {
        FileStream stream = File.Open(HighScoreFile, FileMode.Open, FileAccess.Read);
        try {
            XmlSerializer serializer = new XmlSerializer(typeof(HighScoreData));
            highScoreList = (HighScoreData) serializer.Deserialize(stream);
        } finally {
            stream.Close();
        }
    }

in“highScoreList =(HighScoreData)serializer.Deserialize(stream);”这条线, 它给了我异常“XML文档中存在错误(0,0)。” 内部异常“根元素缺失”。

我做错了吗? 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

首先,序列化程序将查找一个名为您尝试反序列化的类型的根元素,它无法找到。

接下来,您无法反序列化为此结构,因为它没有默认构造函数。序列化器无法确定要作为count参数传递的内容。阅读this article以获取更多详细信息。

这是一个建议的根结构:

<?xml version="1.0" encoding="utf-8" ?>
<HighScoreData>
    <PlayerName>
    ...
</HighScoreData>