今天遇到一个很郁闷的事情,就是使用IsolatedStorageSettings存储数据时,简单的类型,如string,int等存储读取都没有问题,可换成一个自定义的数据类时就会出错,总是取不到对应key的value值。但查看__ApplicationSettings时发现这个key是存在,很郁闷。
后来找到问题的所在是存储自定义数据类时要使用[DataContract](数据契约)和[DataMember],只有这样序列化的对象的实例才可以保存到IsolatedStorageSettings中,并且能正确的读取出来,所以现在特意写下这篇文章已做记录。
一、简单类型数据
数据存储
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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 else12 {13 settings.Add(key, value);14 }15 //保存信息,如果不调用的话,重启后数据会丢失16 settings.Save();
数据读取
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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 }
二、自定义数据
自定义数据类
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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。
保存实例化对象
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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 try11 {12 //判断是否已经存在,存在修改,不存在添加13 if (settings.Contains(key))14 {15 settings[key] = custdata;16 }17 else18 {19 settings.Add(key, custdata);20 }21 //保存信息,如果不调用的话,重启后数据会丢失22 settings.Save();23 }24 catch (System.Exception ex)25 {26 //保存失败,如果保存的是未实例化的对象,会报异常27 MessageBox.Show(ex.Message);28 }
获取存储的实例化对象
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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 }
代码: