IsolatedStorageSettings存储数据_____简单_____自定义(复杂)____数据

今天遇到一个很郁闷的事情,就是使用IsolatedStorageSettings存储数据时,简单的类型,如string,int等存储读取都没有问题,可换成一个自定义的数据类时就会出错,总是取不到对应key的value值。但查看__ApplicationSettings时发现这个key是存在,很郁闷。

后来找到问题的所在是存储自定义数据类时要使用[DataContract](数据契约)和[DataMember],只有这样序列化的对象的实例才可以保存到IsolatedStorageSettings中,并且能正确的读取出来,所以现在特意写下这篇文章已做记录。

一、简单类型数据

 数据存储

View Code
 1 //获取IsolatedStorageSettings
 2 var settings = IsolatedStorageSettings.ApplicationSettings;
 3 //定义需要存储的键/值对
 4 String key = "singledata";
 5 String value = "简单数据";
 6 //判断是否已经存在,存在修改,不存在添加
 7 if (settings.Contains(key))
 8 {
 9     settings[key] = value;
10 }
11 else
12 {
13     settings.Add(key, value);
14 }
15 //保存信息,如果不调用的话,重启后数据会丢失
16 settings.Save();

 数据读取

View Code
 1 String key = "singledata";
 2 String value = String.Empty;
 3 try
 4 {
 5     //从IsolatedStorageSettings获取字符串信息
 6     var settings = IsolatedStorageSettings.ApplicationSettings;
 7     bool isFind = settings.TryGetValue(key, out value);
 8     if (!isFind)
 9     {
10         value = String.Empty;
11     }
12 }
13 catch (System.Exception ex)
14 {
15     //未找到
16     MessageBox.Show(ex.Message);
17 }

二、自定义数据

自定义数据类

View Code
 1 [DataContract]
 2 public class CustomData
 3 {
 4     [DataMember]
 5     public string Name { get; set; }
 6     [DataMember]
 7     public string ProductId { get; set; }
 8     [DataMember]
 9     public string ProductName { get; set; }
10 }
11 注意:此处必须使用[DataContract](数据契约)和[DataMember],只有这样序列化的对象的实例才可以保存到IsolatedStorageSettings中。使用[DataContract]需要添加引用System.Runtime.Serialization。

保存实例化对象

View Code
 1 //获取IsolatedStorageSettings
 2 var settings = IsolatedStorageSettings.ApplicationSettings;
 3 //定义需要存储的key
 4 String key = "CustomData";
 5 //实例化对象
 6 CustomData custdata = new CustomData();
 7 custdata.Name = "天津日报";
 8 custdata.ProductId = "Xeb20120512";
 9 custdata.ProductName = "天津日报";
10 try
11 {
12     //判断是否已经存在,存在修改,不存在添加
13     if (settings.Contains(key))
14     {
15         settings[key] = custdata;
16     }
17     else
18     {
19         settings.Add(key, custdata);
20     }
21     //保存信息,如果不调用的话,重启后数据会丢失
22     settings.Save();
23 }
24 catch (System.Exception ex)
25 {
26     //保存失败,如果保存的是未实例化的对象,会报异常
27     MessageBox.Show(ex.Message);
28 }

获取存储的实例化对象

View Code
1 String key = "CustomData";
2 CustomData custdata = null;
3 //从IsolatedStorageSettings获取字符串信息
4 var settings = IsolatedStorageSettings.ApplicationSettings;
5 if (settings.Contains(key))
6 {
7     custdata = settings[key] as CustomData;
8 }

代码:

https://files.cnblogs.com/qq278360339/PhoneApp1.rar

原文地址:https://www.cnblogs.com/qq278360339/p/2499762.html