Windows 8 保存列表的最佳方式是什么<;对象>;在Windows8应用程序中
我有一个Windows 8 保存列表的最佳方式是什么<;对象>;在Windows8应用程序中,windows-8,Windows 8,我有一个数据列表。我想在每次我的应用程序启动和退出时分别保存和检索它。在Windows 8中,与隔离存储(WP7)的等价物是什么。如何保存这些设置?在windows 8中,您必须为您的应用程序使用本地文件夹,您可以通过以下方式访问该文件夹: StorageFolder folder = ApplicationData.Current.LocalFolder; 然后使用以下方法引用保存在其中的文件: var fileToGet = await folder.GetFileAsync("nameO
数据列表。我想在每次我的应用程序启动和退出时分别保存和检索它。在Windows 8中,与隔离存储(WP7)的等价物是什么。如何保存这些设置?在windows 8中,您必须为您的应用程序使用本地文件夹
,您可以通过以下方式访问该文件夹:
StorageFolder folder = ApplicationData.Current.LocalFolder;
然后使用以下方法引用保存在其中的文件:
var fileToGet = await folder.GetFileAsync("nameOfFile.fileType");
我目前在从事的一个项目中遇到了类似的情况,我希望将自定义对象列表存储到我的Apps LocalFolder中,并在以后重新加载
我的解决方案是将列表序列化为XML字符串,并将其存储在App文件夹中。您应该能够调整我的方法:
static public string SerializeListToXml(List<CustomObject> List)
{
try
{
XmlSerializer xmlIzer = new XmlSerializer(typeof(List<CustomObject>));
var writer = new StringWriter();
xmlIzer.Serialize(writer, List);
System.Diagnostics.Debug.WriteLine(writer.ToString());
return writer.ToString();
}
catch (Exception exc)
{
System.Diagnostics.Debug.WriteLine(exc);
return String.Empty;
}
现在,当您再次加载应用程序时,您可以使用上面提到的加载方法从LocalStorage获取xmlFile,然后将其反序列化以返回列表
string listAsXml = await Windows.Storage.FileIO.ReadTextAsync(xmlFile.txt);
List<CustomObject> deserializedList = DeserializeXmlToList(listAsXml);
string listAsXml=wait Windows.Storage.FileIO.ReadTextAsync(xmlFile.txt);
List deserializedList=DeserializeXmlToList(listAsXml);
同样,根据您的需要调整此选项:
public static List<CustomObject> DeserializeXmlToList(string listAsXml)
{
try
{
XmlSerializer xmlIzer = new XmlSerializer(typeof(List<CustomObject>));
XmlReader xmlRead = XmlReader.Create(listAsXml);
List<CustomObject> myList = new List<CustomObject>();
myList = (xmlIzer.Deserialize(xmlRead)) as List<CustomObject>;
return myList;
}
catch (Exception exc)
{
System.Diagnostics.Debug.WriteLine(exc);
List<CustomObject> emptyList = new List<CustomObject>();
return emptyList;
}
}
publicstaticlist反序列化xmltolist(stringlistasxml)
{
尝试
{
XmlSerializer xmlIzer=新的XmlSerializer(类型(列表));
XmlReader xmlRead=XmlReader.Create(listAsXml);
List myList=新列表();
myList=(xmlIzer.Deserialize(xmlRead))作为列表;
返回myList;
}
捕获(异常exc)
{
系统诊断调试写线(exc);
List emptyList=新列表();
返回空列表;
}
}
您可以使用此类存储和加载设置:
public static class ApplicationSettings
{
public static void SetSetting<T>(string key, T value, bool roaming = true)
{
var settings = roaming ? ApplicationData.Current.RoamingSettings : ApplicationData.Current.LocalSettings;
settings.Values[key] = value;
}
public static T GetSetting<T>(string key, bool roaming = true)
{
return GetSetting(key, default(T), roaming);
}
public static T GetSetting<T>(string key, T defaultValue, bool roaming = true)
{
var settings = roaming ? ApplicationData.Current.RoamingSettings : ApplicationData.Current.LocalSettings;
return settings.Values.ContainsKey(key) &&
settings.Values[key] is T ?
(T)settings.Values[key] : defaultValue;
}
public static bool HasSetting<T>(string key, bool roaming = true)
{
var settings = roaming ? ApplicationData.Current.RoamingSettings : ApplicationData.Current.LocalSettings;
return settings.Values.ContainsKey(key) && settings.Values[key] is T;
}
public static bool RemoveSetting(string key, bool roaming = true)
{
var settings = roaming ? ApplicationData.Current.RoamingSettings : ApplicationData.Current.LocalSettings;
if (settings.Values.ContainsKey(key))
return settings.Values.Remove(key);
return false;
}
}
公共静态类应用程序设置
{
公共静态无效设置(字符串键,T值,布尔漫游=true)
{
var设置=漫游?ApplicationData.Current.RoamingSettings:ApplicationData.Current.LocalSettings;
设置。值[键]=值;
}
公共静态T GetSetting(字符串键,bool roaming=true)
{
返回GetSetting(键,默认值(T),漫游);
}
公共静态T GetSetting(字符串键,T defaultValue,bool roaming=true)
{
var设置=漫游?ApplicationData.Current.RoamingSettings:ApplicationData.Current.LocalSettings;
返回设置.Values.ContainsKey(键)&&
设置。值[键]是否为T?
(T) 设置.值[键]:默认值;
}
公共静态bool hasseting(字符串键,bool roaming=true)
{
var设置=漫游?ApplicationData.Current.RoamingSettings:ApplicationData.Current.LocalSettings;
返回settings.Values.ContainsKey(key)和&settings.Values[key]为T;
}
公共静态bool removeseting(字符串键,bool roaming=true)
{
var设置=漫游?ApplicationData.Current.RoamingSettings:ApplicationData.Current.LocalSettings;
if(设置.值.容器(键))
返回设置。值。删除(键);
返回false;
}
}
但您只能保存和加载基本类型(bool、int、string等)。这就是为什么必须将列表序列化为XML或其他可以存储在字符串中的格式。要在XML中序列化和反序列化对象,可以使用以下方法:
public static string Serialize(object obj)
{
using (var sw = new StringWriter())
{
var serializer = new XmlSerializer(obj.GetType());
serializer.Serialize(sw, obj);
return sw.ToString();
}
}
public static T Deserialize<T>(string xml)
{
using (var sw = new StringReader(xml))
{
var serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(sw);
}
}
公共静态字符串序列化(对象obj)
{
使用(var sw=new StringWriter())
{
var serializer=新的XmlSerializer(obj.GetType());
序列化器。序列化(sw、obj);
返回sw.ToString();
}
}
公共静态T反序列化(字符串xml)
{
使用(var sw=新的StringReader(xml))
{
var serializer=newxmlserializer(typeof(T));
返回(T)序列化程序。反序列化(sw);
}
}
另见
public static string Serialize(object obj)
{
using (var sw = new StringWriter())
{
var serializer = new XmlSerializer(obj.GetType());
serializer.Serialize(sw, obj);
return sw.ToString();
}
}
public static T Deserialize<T>(string xml)
{
using (var sw = new StringReader(xml))
{
var serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(sw);
}
}