应用数据的存储格式常用的分为json和xml两种(其实我都想略过这个地方的,json我一直用的是json.net,而wp上操作xml的方式与其他相比也没太多变化)。

先说说json数据存储,关于json概念就不粘贴复制了。在wp里使用json数据格式来存储相关的信息会有两种编程方式:DataContractJsonSerializer类和JsonObject。

DataContractJsonSerializer类对Json数据进行序列化和反序列化是最简洁的Json数据操作方式,序列化的过程是把实体类对象转化为json字符串对象,该操作是直接把实体类的属性名称和属性值组成“名称/值”的形式,反序列化的过程则刚好倒过来。

public string DataToJson(object obj)
        {
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
            string result = string.Empty;
            using(MemoryStream ms = new MemoryStream())
            {
                serializer.WriteObject(ms, obj);
                ms.Position = ;
                using(StreamReader reader = new StreamReader(ms))
                {
                    result = reader.ReadToEnd();
                }
            }

            return result;
        }

        public T JsonToData<T>(string jsonString)
        {
            var ds = new DataContractJsonSerializer(typeof(T));
            var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
            T obj = (T)ds.ReadObject(ms);
            ms.Dispose();
            return obj;
        }

以上就是DataContractJsonSerializer类序列化和反序列化的方法,接下来说说JsonObject类自定义json对象。

//组装json串
//jsonObject.SetNameString("Name",JsonValue.CreateStringValue("waha"))
public string GetJsonByJsonObject()
        {
            JsonObject jsonObject = new JsonObject();
            jsonObject["Name"] = JsonValue.CreateStringValue("waha");
            jsonObject[);
            return jsonObject.Stringify();
        }

//读取json
JsonObject jsonObject = JsonObject.Parse(jsonString);
//第二参数为默认值
var name = jsonObject.GetNamedString("Name","");
);

以上就是json序列化和反序列化,接下来简单说说xml的操作,DataContractSerializer类和XmlDocument类(其实我用的较多的是XDocument)。先说说DataContractSerializer类,这个的名称和上面的比较相似,就是少了个“Json”。

public async void ObjectToXml<T>(T data,string fileName)
        {
            StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
            using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
            ))
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(T));
                serializer.WriteObject(outStream.AsStreamForWrite(), data);
                await outStream.FlushAsync();
            }
        }

        public async Task<T> XmlToObject<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())
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(T));
                _sessionState = (T)serializer.ReadObject(inStream.AsStreamForRead());
            }
            return _sessionState;
        }

测试如下:

            People p =  };
            ObjectToXml<People>(p, "testSerializer");
            var file = await ApplicationData.Current.LocalFolder.GetFileAsync("testSerializer");
            var str = await FileIO.ReadTextAsync(file);

str的值如下:

<People xmlns:i=</Age><Name>waha</Name></People>

应用数据的存储格式就说到这里,整个应用数据的内容也就完了,晚安!

windowsphone8.1学习笔记之应用数据(四)的更多相关文章

  1. windowsphone8.1学习笔记之应用数据(三)

    之前说了如何操作文本文件,如果是图片文件或者其他的二进制文件则需要操作文件的Stream或者Buffer数据.就需要用到DataReader和DataWriter这两个类了,这个的好好的练一下,以后的 ...

  2. windowsphone8.1学习笔记之应用数据(二)

    上一篇说了应用数据的应用设置,这篇说说应用文件,应用文件主要分为三种:本地应用文件.漫游应用文件和临时应用文件. 获取根目录方法如下,都是返回一个StorageFolder对象(稍后介绍这个). // ...

  3. windowsphone8.1学习笔记之应用数据(一)

    数据存储分为两种:云存储和应用数据(即本地存储),wp中的应用数据分为两种,一种是应用设置:一种是应用文件.wp的数据相关都是通过ApplicationData来实现,一个程序只有数据存储区. 先说应 ...

  4. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段 代码工程地址: https://github. ...

  5. Java四种引用--《深入理解Java虚拟机》学习笔记及个人理解(四)

    Java四种引用--<深入理解Java虚拟机>学习笔记及个人理解(四) 书上P65. StrongReference(强引用) 类似Object obj = new Object() 这类 ...

  6. 微信小程序开发:学习笔记[9]——本地数据缓存

    微信小程序开发:学习笔记[9]——本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...

  7. springmvc学习笔记(18)-json数据交互

    springmvc学习笔记(18)-json数据交互 标签: springmvc springmvc学习笔记18-json数据交互 springmvc进行json交互 环境准备 加入json转换的依赖 ...

  8. UNP学习笔记(第十四章 高级I/O函数)

    本章讨论我们笼统地归为“高级I/O”的各个函数和技术 套接字超时 有3种方法在涉及套接字的I/O操作上设置超时 1.调用alarm,它在指定超时时期满时产生SIGALRM信号 2.在select中阻塞 ...

  9. Android学习笔记(八)——四种基本布局

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,或是嵌套子布局,从而编写出精美的界 ...

随机推荐

  1. SparkMLlib基础内容

    SparkMLlib基础内容 (一),多种数据类型 1.1 本地向量集 def testVetor: Unit ={ val vd:Vector=Vectors.dense(2,3,6) printl ...

  2. ASP.NET MVC学习---(五)MVC初体验

    经过之前n多的铺垫 我们已经大概了解了这个姓m名vc的家伙了 那么今天我们就来体验一把 怎么体验呢? 就来做一个小例子吧~ mvc增删改查的例子 数据库还是之前我们的老朋友 关系图: 表中的数据已填好 ...

  3. JS或jQuery获取当前屏幕宽度

    Javascript: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.b ...

  4. 配置Linux系统实现dhcp功能

    配置Linux系统实现dhcp功能 1.背景及原理    DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用 ...

  5. Linux Ubuntu下Dropbox图标消失

    Linux下的Dropbox是支持命令行模式的.,在terminal中输入dropbox后,如下提示: Dropbox command-line interface commands: Note: u ...

  6. 动态添加Fragment

    在Fragment简单用法的基础上做修改 一.新建:another_right_fragment.xml <LinearLayout xmlns:android="http://sch ...

  7. hdu - 4974 - A simple water problem(贪心 + 反证)

    题意:N个队(N <= 100000),每一个队有个总分ai(ai <= 1000000),每场比赛比赛两方最多各可获得1分,问最少经过了多少场比赛. 题目链接:http://acm.hd ...

  8. TCP/IP详解 卷一(第十八章 TCP连接的建立和终止)

    建立连接 建立一个TCP连接时会发生下述情况 1.客户TCP发送一个SYN(同步)分节,它告诉服务器将在(待建立)连接中发送的数据的初始序列号. 2.服务器确认(ACK)客户的SYN,同时自己也得发送 ...

  9. iOS应用程序开发之内购

    内购简介 配置iTunes Connect iOS客户端开发工作 一.内购简介 1⃣️通过苹果应用程序商店有三种主要赚钱的方式: –直接收费(与国内大部分用户的消费习惯相悖,如果直接收费,不要设置为6 ...

  10. Pycharm中的scrapy安装教程

    在利用pycharm安装scrapy包是遇到了挺多的问题.在折腾了差不多折腾了两个小时之后总算是安装好了.期间各种谷歌和百度,发现所有的教程都是利用命令行窗口安装的.发现安装scrapy需要的包真是多 ...