Windows 8学习笔记(四)--Storage数据存储

AppData在Metro App中的存储主要由两种形式,一种是键值对的形式,还有一种是StorageFile文件的存储形式。

其中键值对形式的存储又分几种:ApplicationDataCompositeValue复合值存储、ApplicationDataContainer容器数据存储、ApplicationDataContainerSettings普通的容器数据存储。

注意这种键值对的存储值只能以字符形式存储,若要存储某对象,需转成XMLjson等其它字符数据。

ApplicationDataCompositeValue的用法

支持复合值的存储

?
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>(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();
             }
         }</t>

 

取文件数据

?
static async public Task<t> RestoreAsync<t>( 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_;
         }</t></t>

以上就是Metro Style App中数据存储的几种方式,怎么样,跟Windows Phone7中还是有些差别的吧。。。

 

顺便整理一下xml/json格式数据的序列与反序列化的通用方法

JSON数据的序列与反序列

?
public static T DataContractJsonDeSerializer<t>( 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;
         }</t>

XML数据的序列与反序列

?
/// <summary>
         /// 需要序列化XML数据对象
         /// </summary>
         /// <param name="objectToSerialize"><returns></returns>
         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;
         }
        
         /// <summary>
         /// XML数据反序列化
         /// </summary>
         /// <typeparam name="T">反序列化对象</typeparam>
         /// <param name="xmlstr"><returns></returns>
         public static T XMLDeserialize<t>( 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);
             }
         }</t>


Trackback:

http://www.cnblogs.com/jing870812/archive/2012/04/05/2433753.html

转载于:https://www.cnblogs.com/hdjjun/archive/2012/07/03/2574945.html

在这个系列课程中,来自微软的权威技术专家将向您解释Windows操作系统的内部工作原理,从系统架构的大局观出发,逐步展示进程、线程、安全机制、内存管理和存储管理等子系统的工作方式。通过对底层原理的揭示,使您更进一步的理解Windows上各类程序的工作方式和如何进行错误诊断及性能优化。 本次课程的内容编排得到了国内知名技术作家,《Windows Internals》一书的中文译者,潘爱民先生的大力支持,同时TechNet也邀请到了众多微软一线技术专家进行讲解。这是一个为IT专业人员量身定做的Windows内部知识课程,在介绍原理的同时,也紧密地围绕实际案例和常见的故障进行分析点评。这是一个系统的学习Windows底层工作机制的好机会,课程内容深入浅出,精彩纷呈,绝对不容错过。 深入研究Windows内部原理系列之一:Windows的昨天、今天和明天 讲师信息:潘爱民 2007年01月25日 14:00-15:30 Level: 300 著名技术作家、微软亚洲研究院研究员潘爱民老师将在这次课程中跟听众分享Windows的发展历程和技术精萃,描绘操作系统的体系架构、Vista的内核变更以及今后版本Windows的发展趋势。 深入研究Windows内部原理系列之二:Windows体系结构-从操作系统的角度 讲师信息:张银奎 2007年01月26日 14:00-15:30 Level: 400 操作系统是计算机系统的灵魂和管理中心,也是软件系统中最复杂的部分。本讲座将以生动的讲解和丰富的演示带您领略Windows操作系统的核心架构和主要组件,包括HAL、内核、执行体、系统进程(IDLE、SMSS.EXE、WinLogon.EXE)和Windows子系统(CSRSS.EXE、WIN32K.SYS以及子系统DLL)等。并讨论中断管理、对象管理、和异常分发等系统机制和实现这些机制的基本数据结构。 深入研究Windows内部原理系列之三:Windows体系结构-从应用程序的角度 讲师信息:曾震宇 2007年01月29日 14:00-15:30 Level: 400 从服务器软件到Office办公应用,从联网游戏到即时消息,不管这些应用的复杂程度如何,他们都是一个个在操作系统控制和管理之下的可执行程序。本次课程邀请微软全球技术中心专家级工程师,为各位讲解一个程序是如何经历从启动、分配资源、运行、结束这一连串的过程,并且介绍其中的重要概念和排错诊断技巧。 深入研究Windows内部原理系列之Windows操作系统中的重要基本概念 讲师信息:高宇 2007年01月30日 14:00-15:30 Level: 400 进程、线程、资源分配、内存管理、Win32 API、服务、安全,这些是工作中常常提及但是又无法深入理解的神秘概念。在这次课程中,讲师将介绍Windows中最常见与最重要的一些基本概念. 使大家能够顺利地参与到本系列之后的讨论中去。 深入研究Windows内部原理系列之五:Windows Sysinternals工具集介绍 讲师信息:彭爱华 2007年01月31日 14:00-15:30 Level: 400 Sysinternals Suite(Windows Sysinternals工具集)包含一系列免费的系统工具,其中有大名鼎鼎的Process Explorer、FileMon、RegMon等(Windows Vista下,FileMon和RegMon则被Process Monitor所代替),如果把系统管理员比喻成战士的话,那么Sysinternals Suite就是我们手中的良兵利器。熟悉和掌握这些工具,并且对Windows的体系有一定的了解,将大幅度的提高日常的诊断和排错能力。本课程将以任务驱动的模式,介绍几个经典的应用案例,来介绍Sysinternals Suite的强大功能。 深入研究Windows内部原理系列之六:Vista新特性底层揭秘 讲师信息:彭爱华 2007年02月01日 14:00-15:30 Level: 400 Windows Vista绝非仅仅是具有诸如3D切换、毛玻璃等炫目的界面效果,花钱购买了Windows Vista,而仅仅为了使用其界面效果,难免有点“买椟还珠”的感觉。实际上Windows Vista值得称道的是它具有很多全新的安全特性,例如用户帐户控制、IE保护模式、服务隔离和Windows资源保护等等。有了这些全新的安全特性,我们就可以在相当的程度上摆脱恶意软件的滋扰。Windows之父Jim Allchin曾经说过不要满足于只知道How-to、小技巧之类的知识,而是应该深入底层了解其内部原理。只有了解了这些安全特性的内在原理,才
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值