码迷,mamicode.com
首页 > Web开发 > 详细

读书笔记5:json与xml数据存储

时间:2016-05-11 13:16:13      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

实际项目数据存储往往会用到相对复杂的存储格式,不仅仅是简单的字符串,本章学习的是如何在程序中使用成熟的数据格式,如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文件进行序列化和反序列化

读书笔记5:json与xml数据存储

标签:

原文地址:http://www.cnblogs.com/by-admini22/p/5469641.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!