今天遇到一个很郁闷的事情,就是使用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 }
代码: