поместить массив пользовательских классов в набор данных или XML (C #) - PullRequest
1 голос
/ 22 сентября 2009

Я делаю небольшую карточную игру, для которой требуется список рекордов, который сохраняется во внешнем файле и загружается из него в начале каждой игры.

Я написал файл XML в этом формате:

<highscore>
<name>bob</name>
<score>10</score>
<time>3:42</time>
<date>21-09-09</date>
</highscore>

Я выяснил, как создать набор данных, используйте dataset.readxml, чтобы загрузить в него XML, создать строку и затем записать каждую строку в массив HighScores:

class HighScore
{
string nameString, timeString, dateString;
int scoreInt;
}

Я также выяснил, как проверить, является ли рекорд игры более высоким, чем самый низкий в массиве.

Я работаю над сортировкой, но как я могу вернуть массив HighScore[] обратно в набор данных, затем в XML или даже из массива прямо в набор данных? Я пытался найти его в Google, но не нашел того, что хочу.

1 Ответ

1 голос
/ 22 сентября 2009

Вам действительно нужно использовать DataSet только для сериализации массива? Если вам нужно только сериализовать массив, вы можете использовать простую сериализацию Xml. Вот пример:

    [XmlRoot("highScore")]
    public class HighScore
    {
        [XmlElement("name")]
        public string Name { get; set; }
        [XmlElement("dateTime")]
        public DateTime Date { get; set; }
        [XmlElement("score")]
        public int Score { get; set; }
    }

    static void Main(string[] args)
    {

        IList<HighScore> highScores = new[] { 
            new HighScore {Name = "bob", Date = DateTime.Now, Score = 10 },
            new HighScore {Name = "john", Date = DateTime.Now, Score = 9 },
            new HighScore {Name = "maria", Date = DateTime.Now, Score = 28 }
        };


        // serializing Array
        XmlSerializer s = new XmlSerializer(typeof(HighScore[]));
        using (Stream st = new FileStream(@"c:\test.xml", FileMode.Create))
        {
            s.Serialize(st, highScores.ToArray());
        }

        // deserializing Array
        HighScore[] highScoresArray;
        using (Stream st = new FileStream(@"c:\test.xml", FileMode.Open))
        {
            highScoresArray = (HighScore[])s.Deserialize(st);
        }

        foreach (var highScore in highScoresArray)
        {
            Console.WriteLine("{0}, {1}, {2} ", highScore.Name, highScore.Date, highScore.Score);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...