标签:
实际项目数据存储往往会用到相对复杂的存储格式,不仅仅是简单的字符串,本章学习的是如何在程序中使用成熟的数据格式,如Json,xml等来实现与程序业务相关的数据存储。
一、json数据序列化存储
json全程JavaScript Object Notation ,是一种轻量级的数据交换语言,易于阅读。json的特点是数据格式比较简单,易于读写,格式是压缩的,占用带宽小并易于解析,所以通常会用json格式传送数据或存储数据
json语法简介:
object:一个对象以"{"开始,并以"}"退出。一个对象包含一系列非排序的名称/值对,每个名称/值对使用","分开
名称/值:名称和值之间使用":"隔开,一般形式是{name:value}。在Windows10中如果要使用json的数据格式来存储相关信息有两种编程方式:
1.使用DataContractJsonSerializer类对Json数据进行序列化和反序列化。这是最简洁的Json数据操作方式。这样操作的弊端是灵活性很差,序列化成Json字符串的"名称/值"的"名称"必须和类的属性完全一致。
2.JsonObject对象来自定义JSON对象
例如,通过JsonObject类创建一个Json对象:
{“city”:"Beijing", "street":"Chaoyang Road", "postcode":100025}
创建其对应的JsonObject类实现的方法:
JsonObject jsonobject = new() JsonObject; jsonobject.SetNameValue("city", JsonValue.CreatrStringValue("Beijing")); jsonobject.SetNameValue("street", JsonValue.CreatrStringValue("Chaoyang Rode")); jsonobject.SetNameValue("city", JsonValue.CreatrNumberValue(100025));
获取JsonObject类对象"city"对应的数值如下:
jsonobject.GetNamedString("City", "默认值");
二、XML文件存储
XML是可扩展标记语言,用于创建内容 并使用限定标记,从而使每个单词、语句或块成为可识别,可分类的信息。XML是一种易于使用和易于拓展的标记语言,是纯粹的ASCII文本。如下为XML常用格式:
<?xml version = "1.0" encoding = "UTF-8"?> <test> Hello Windows 10 </ test>
对大型复杂的文档来说,XML是一种理想的描述语言,既能指定文档中的词汇,又能指定元素之间的关系。类似于Json,Windows 10 中对于XML的序列化和反序列化也有两种方式:
1.使用DataContrctSerializer类对XML文件进行序列化和反序列化
DataContractSerializer类似于DataContractJsonSerializer 类
///<summary> ///把实体类对象序列化位XML格式存储到文件里 ///</summary> ///<typeprarm name = "T">实体类类型</typeprarm> ///<param name = "data">实体类对像</param> ///<param name = "fileName">文件名</param> ///<returns></returns> public async Task SavaAsync <T>(T data, string fileName) { StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAcync(fileName, CreationCollisionOption.ReolaceExisting); //获取文件数据流进行操作 using(IRandomAccessStream raStream = await file.OpenAsync(FileAccessMode.ReadWrite)) { using(IOputStream outStream = raStream.GetOutputStreamAt(0)) { //创建序列化对象写入数据 DataContractSerializer serializer = new DataContractSerializer(typeof(T)); serializer.WriteObject(outStream.AsStreamForWrite(), data); await outStream.FlushAsync(); } } } ///<summary> ///反序列化XML文件 ///</summary> ///<typeprarm name = "T">实体类类型</typeprarm> ///<param name = "data">实体类对像</param> ///<param name = "fileName">文件名</param> ///<returns></returns> public async Task <T> ReadAsync<T>(string filename) { //获取试题类类型实例化一个对象 T sessionState_ = default(T); StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(filename); if(file == null) return sessionState_; using (IInputStream inStream = await file.OpenSequentialReadAsync()) { //反序列化XML文件 DataContractSerializer serializer = new DataContractSerializer(typeof(T)); sessionState_ = (T)serializer.ReadObject(inStream.AsStreamForRead()); } return sessionState_; }
以一个简单的person类为例,下面是类的定义和转化的xml文档:
public class Person { public string Name {get; set;} public int Age {get; set;} } //Name = "terry", Age = 41,序列化结果如下: < Person xmln:i = "http://www.w3.org/2001/XMLSchema - instance" xmls = "http://schemas.datacontract.org/2004/07/DataContractSerializerDemo"> <Age>41</Age> <Name>terry</Name> </Person>
2.使用XmlDocument 类对XML文件进行序列化和反序列化
标签:
原文地址:http://www.cnblogs.com/by-admini22/p/5469641.html