如何从现有文件C#将数据放入多维数组

时间:2019-02-10 10:46:17

标签: c# arrays multidimensional-array

我想为我的教堂创建一个程序,该教堂从保存文件中获取歌曲。 但是我不知道如何将这些数据放入多维数组。 以下是我想放入数组的内容。那可能吗? (我是C#的新手)

<items>
  <CMediaBase xsi:type="CSong">
     <DisplayTitle>Eigen bundel 10 - In Jesus name</DisplayTitle>
     <IsDirty>false</IsDirty>
     <SwapLanguages>false</SwapLanguages>
     <SongLanguage>Both</SongLanguage>
     <MediaType>Song</MediaType>
     <Number>10</Number>
     <SelectedVersion>MyVersion</SelectedVersion>
     <SongBookName>Eigen bundel</SongBookName>
     <ThemeName>OPS</ThemeName>
     <Title>In Jesus name</Title>
  </CMediaBase>
</items>

1 个答案:

答案 0 :(得分:3)

我认为您没有使用适当的数据结构来解决问题。

二维数组无法解决这里的问题,归结为解析歌曲XML文件并将该数据表示形式转换为可在C#中使用的内容。

我建议用C#类来代表您的歌曲,如下所示:

[XmlRoot("SongList")]
public class SongList
{
    [XmlElement("Song")]
    public List<Song> Songs { get; set; }
}

public class Song
{
    [XmlElement("DisplayTitle")]
    public string DisplayTitle { get; set; }

    [XmlElement("IsDirty")]
    public bool IsDirty { get; set; }

    [XmlElement("SwapLanguage")]
    public bool SwapLanguage { get; set; }

    [XmlElement("SongLanguage")]
    public string SongLanguage { get; set; }

    [XmlElement("MediaType")]
    public string MediaType { get; set; }

    [XmlElement("Number")]
    public int Number { get; set; }

    [XmlElement("SongBookName")]
    public string SongBookName { get; set; }

    [XmlElement("ThemeName")]
    public string ThemeName { get; set; }

    [XmlElement("Title")]
    public string Title { get; set; }
}

请注意使用 [XmlElement] [XmlRoot] 属性,这些属性使我们可以向XML序列化程序指定如何将XML表示形式解析为C# XML的表示形式。

现在使用如下所示的XML字符串:

 string xml = @"<SongList>
 <Song>
   <DisplayTitle> Eigen bundel 10 - In Jesus name</DisplayTitle>
   <IsDirty > false </IsDirty>
   <SwapLanguages >false </SwapLanguages>
   <SongLanguage > Both </SongLanguage >
   <MediaType >Song</MediaType >
   <Number>10</Number >
   <SelectedVersion >MyVersion</SelectedVersion >
   <SongBookName > Eigen bundel</SongBookName >
   <ThemeName >OPS</ThemeName >
   <Title >In Jesus name</Title>
 </Song>
 <Song>
   <DisplayTitle > Song 2</DisplayTitle >
   <IsDirty > true </IsDirty >
   <SwapLanguages > false </SwapLanguages >
   <SongLanguage > Both </SongLanguage >
   <MediaType > Song </MediaType >
   <Number > 10 </Number >
   <SelectedVersion > MyVersion </SelectedVersion >
   <SongBookName > Eigen bundel </SongBookName >
   <ThemeName > OPS </ThemeName >
   <Title > In Jesus name</Title >
   </Song>
 </SongList>";

然后,您可以使用C#序列化程序将此XML表示反序列化为对象表示,如下所示:

var serializer = new XmlSerializer(typeof(SongList));

using (var reader = new StringReader(xml))
{
   var albums = serializer.Deserialize(reader) as SongList;
}

如果要读取文本文件,则应将文件加载到FileStream中,并按如下所示反序列化:

using (var fs= new FileStream("<YOUR XML FILE PATH>", FileMode.Open)) 
{
  var songList = serializer.Deserialize(fs) as SongList;
}

请注意,您应该导入以下名称空间,以便能够使用XML序列化程序和FileStream类:

using System.IO;
using System.Xml;
using System.Xml.Serialization;