Проблема при загрузке данных XML в XNA - PullRequest
0 голосов
/ 03 января 2011

Я пытаюсь использовать 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();
        }
    }

в "highScoreList = (HighScoreData) serializer.Deserialize (stream);"эта строка дает мне исключение «В документе XML есть ошибка (0, 0)».с внутренним исключением "Корневой элемент отсутствует".

Я что-то не так делаю?Любая помощь приветствуется.

1 Ответ

0 голосов
/ 03 января 2011

Прежде всего, сериализатор будет искать корневой элемент, названный как тип, который вы пытаетесь десериализовать, который он не может найти.

Далее, вы не можете десериализоваться в эту структуру, так как у него нет конструктора по умолчанию.Сериализатор не может выяснить, что передать в качестве параметра count.Прочтите эту статью , чтобы получить более подробную информацию.

Вот рекомендуемая корневая структура:

<?xml version="1.0" encoding="utf-8" ?>
<HighScoreData>
    <PlayerName>
    ...
</HighScoreData>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...