我正在开发一个Windows 8.1商店应用程序并且我要添加一些文本,但我不确定使用资源文件或XML文件是否更好。
这是一个XML文件:
<?xml version="1.0" encoding="iso-8859-1"?>
<words>
<word>
<id>1</id>
<name>Teacher</name>
</word>
<word>
<id>2</id>
<name>Pitcher</name>
</word>
我必须反序列化一组单词(带有id和名称),并将其加载到单词列表中。我问是否更好地从XML或资源文件反序列化这些对象。
你推荐我什么?
答案 0 :(得分:1)
由于Visual Studio与Windows 8.x项目中的.resx文件具有内置兼容性,因此我建议使用Ressource文件解决方案。就个人而言,我喜欢使用这种方法与优秀的ResXManager,这使得它非常简单。
此外,使用简单的DataBinding在XAML中使用这些单词会很简单,因为它不是内置的,因此XML解决方案可能会有点复杂。那么,为什么重新发明轮子?
答案 1 :(得分:1)
因为这是一个Windows 8.1商店应用程序,所以我就是这样解决这个问题的方法:
private static async Task<List<Word>> GetWordsFromFileAsync(string folder, string file)
{
List<Word> list = null;
StorageFolder storageFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
storageFolder = await storageFolder.GetFolderAsync(folder);
// acquire file
StorageFile storageFile = await storageFolder.GetFileAsync(file);
Stream readStream = await storageFile.OpenStreamForReadAsync();
XDocument xDoc = XDocument.Load(readStream);
list = xDoc
.Descendants("word")
.Select(x => new Word
{
Id = (int) x.Element("id"),
Name = (string) x.Element("name")
}).ToList();
return list;
}
感谢@Selman22指出了正确的方向。
答案 2 :(得分:0)
我建议你LINQ to XML
,首先创建你的课程:
public class Word
{
public int Id { get; set; }
public string Name { get; set; }
}
然后像这样填充你的列表:
var words = XDocument.Load("path")
.Descendants("word")
.Select(x => new Word
{
Id = (int) x.Element("Id"),
Name = (string) x.Element("Name")
}).ToList();
答案 3 :(得分:0)
创建一个样本数据类,用于存储XML元素值:
public class Word
{
string name;
string id;
public string Name
{
get { return name; }
set { name= value; }
}
public string ID
{
get { return id; }
set { id= value; }
}
}
这是您从XML中读取值的方式,
var xElem = XElement.Load("XML/books.xml");
var result=
from elem in xElem.Descendants("Word")
orderby elem.Attribute("name").Value
select new Book
{
Name = elem.Attribute("name").Value,
Id = elem.Element("Id").Value,
};