Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
// Create a composite setting Windows.Storage.ApplicationDataCompositeValue composite = new Windows.Storage.ApplicationDataCompositeValue();
composite["intVal"] = 1;
composite["strVal"] = "string";
localSettings.Values["exampleCompositeSetting"] = composite;
// Read data from a composite settingWindows.Storage.ApplicationDataCompositeValue composite = (Windows.Storage.ApplicationDataCompositeValue)localSettings.Values["exampleCompositeSetting"];
// Delete a composite setting
localSettings.Values.Remove("exampleCompositeSetting");
ApplicationDataContainer的用法 支持创建、删除、枚举、数据容器层次的贯穿
Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
// Create a setting in a container
Windows.Storage.ApplicationDataContainer container =
localSettings.CreateContainer("exampleContainer", Windows.Storage.ApplicationDataCreateDisposition.Always);
if (localSettings.Containers.ContainsKey("exampleContainer"))
{
localSettings.Containers["exampleContainer"].Values["exampleSetting"] = "Hello Windows";
}
// Read data from a setting in a container
bool hasContainer = localSettings.Containers.ContainsKey("exampleContainer");
bool hasSetting = false;
if (hasContainer)
{
hasSetting = localSettings.Containers["exampleContainer"].Values.ContainsKey("exampleSetting");
}
// Delete a container
localSettings.DeleteContainer("exampleContainer");
ApplicationDataContainerSettings的用法 最简单的键值对存储
var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
// Create a simple setting
localSettings.Values["exampleSetting"] = "Hello Windows 8";
if (localSettings.Values.ContainsKey("exampleSetting"))
{
// Read data from a simple setting
Object value = localSettings.Values["exampleSetting"];
}
localSettings.Values.Remove("exampleSetting");
StorageFile的存储,以文件的形式进行存储
存入数据
static async public Task SaveAsync(T data,string fileName)
{
// Get the output stream for the SessionState file.
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
IRandomAccessStream raStream = await file.OpenAsync(FileAccessMode.ReadWrite);
using (IOutputStream outStream = raStream.GetOutputStreamAt(0))
{
// Serialize the Session State.
DataContractSerializer serializer = new DataContractSerializer(typeof(T));
serializer.WriteObject(outStream.AsStreamForWrite(), data);
await outStream.FlushAsync();
}
}
取文件数据
static async public Task RestoreAsync(string filename)
{
// Get the input stream for the SessionState file.
T sessionState_ = default(T);
try
{
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(filename);
if (file == null) return sessionState_;
IInputStream inStream = await file.OpenSequentialReadAsync();
// Deserialize the Session State.
DataContractSerializer serializer = new DataContractSerializer(typeof(T));
sessionState_= (T)serializer.ReadObject(inStream.AsStreamForRead());
}
catch (Exception)
{
// Restoring state is best-effort. If it fails, the app will just come up with a new session.
}
return sessionState_;
} 以上就是Metro Style App中数据存储的几种方式,怎么样,跟Windows Phone7中还是有些差别的吧。。。
顺便整理一下xml/json格式数据的序列与反序列化的通用方法 JSON数据的序列与反序列
public static T DataContractJsonDeSerializer(string jsonString)
{
var ds = new DataContractJsonSerializer(typeof(T));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
T obj = (T)ds.ReadObject(ms);
ms.Dispose();
return obj;
}
public static string ToJsonData(object item)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());
string result = String.Empty;
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, item);
ms.Position = 0;
using (StreamReader reader = new StreamReader(ms))
{
result = reader.ReadToEnd();
}
}
return result;
} XML数据的序列与反序列
///
/// 需要序列化XML数据对象
///
///
public static string XMLSerialize(object objectToSerialize)
{
string result = "";
using (MemoryStream ms = new MemoryStream())
{
DataContractSerializer serializer = new DataContractSerializer(objectToSerialize.GetType());
serializer.WriteObject(ms, objectToSerialize);
ms.Position = 0;
using (StreamReader reader = new StreamReader(ms))
{
result = reader.ReadToEnd();
}
}
return result;
}
///
/// XML数据反序列化
///
/// 反序列化对象
///
public static T XMLDeserialize(string xmlstr)
{
byte[] newBuffer = System.Text.Encoding.UTF8.GetBytes(xmlstr);
if (newBuffer.Length == 0)
{
return default(T);
}
using (MemoryStream ms = new MemoryStream(newBuffer))
{
DataContractSerializer serializer = new DataContractSerializer(typeof(T));
return (T)serializer.ReadObject(ms);
}
}