2009-09-22 1 views
1

나는 외부 파일에 저장되고 각각의 게임이 시작할 때마다 높은 점수 목록을 필요로하는 작은 카드 게임을 만들고 있습니다.데이터 집합 또는 XML (C#)에 사용자 지정 클래스 배열 넣기

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

나는 데이터 집합을 만들고 그것으로 XML을로드, dataset.readxml 사용하여 행을 생성 한 다음에 각 행을 작성하는 방법을 알아 낸 :

나는이 형식의 XML 파일을 작성 최고 기록의 배열 :

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

나는 또한 게임의 최고 점수가 배열에서 가장 낮은보다 높은 경우 확인하는 방법을 알아 낸 것.

정렬 작업을하고 있지만 데이터 배열로 배열을 다시 가져 와서 XML로 가져 오거나 배열에서 곧바로 데이터 집합으로 가져올 수 있습니까? 나는 그것을 시도했지만, 나는 내가 원하는 것을 발견하지 못했다.

답변

1

어레이를 직렬화하기 위해 정말로 DataSet을 사용해야합니까? 배열을 serialize하기 만하면 간단한 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); 
     } 
    }