windowsphone8.1学习笔记之应用数据(四)
应用数据的存储格式常用的分为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学习笔记之应用数据(四)的更多相关文章
- windowsphone8.1学习笔记之应用数据(三)
之前说了如何操作文本文件,如果是图片文件或者其他的二进制文件则需要操作文件的Stream或者Buffer数据.就需要用到DataReader和DataWriter这两个类了,这个的好好的练一下,以后的 ...
- windowsphone8.1学习笔记之应用数据(二)
上一篇说了应用数据的应用设置,这篇说说应用文件,应用文件主要分为三种:本地应用文件.漫游应用文件和临时应用文件. 获取根目录方法如下,都是返回一个StorageFolder对象(稍后介绍这个). // ...
- windowsphone8.1学习笔记之应用数据(一)
数据存储分为两种:云存储和应用数据(即本地存储),wp中的应用数据分为两种,一种是应用设置:一种是应用文件.wp的数据相关都是通过ApplicationData来实现,一个程序只有数据存储区. 先说应 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段 代码工程地址: https://github. ...
- Java四种引用--《深入理解Java虚拟机》学习笔记及个人理解(四)
Java四种引用--<深入理解Java虚拟机>学习笔记及个人理解(四) 书上P65. StrongReference(强引用) 类似Object obj = new Object() 这类 ...
- 微信小程序开发:学习笔记[9]——本地数据缓存
微信小程序开发:学习笔记[9]——本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...
- springmvc学习笔记(18)-json数据交互
springmvc学习笔记(18)-json数据交互 标签: springmvc springmvc学习笔记18-json数据交互 springmvc进行json交互 环境准备 加入json转换的依赖 ...
- UNP学习笔记(第十四章 高级I/O函数)
本章讨论我们笼统地归为“高级I/O”的各个函数和技术 套接字超时 有3种方法在涉及套接字的I/O操作上设置超时 1.调用alarm,它在指定超时时期满时产生SIGALRM信号 2.在select中阻塞 ...
- Android学习笔记(八)——四种基本布局
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,或是嵌套子布局,从而编写出精美的界 ...
随机推荐
- SparkMLlib基础内容
SparkMLlib基础内容 (一),多种数据类型 1.1 本地向量集 def testVetor: Unit ={ val vd:Vector=Vectors.dense(2,3,6) printl ...
- ASP.NET MVC学习---(五)MVC初体验
经过之前n多的铺垫 我们已经大概了解了这个姓m名vc的家伙了 那么今天我们就来体验一把 怎么体验呢? 就来做一个小例子吧~ mvc增删改查的例子 数据库还是之前我们的老朋友 关系图: 表中的数据已填好 ...
- JS或jQuery获取当前屏幕宽度
Javascript: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.b ...
- 配置Linux系统实现dhcp功能
配置Linux系统实现dhcp功能 1.背景及原理 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用 ...
- Linux Ubuntu下Dropbox图标消失
Linux下的Dropbox是支持命令行模式的.,在terminal中输入dropbox后,如下提示: Dropbox command-line interface commands: Note: u ...
- 动态添加Fragment
在Fragment简单用法的基础上做修改 一.新建:another_right_fragment.xml <LinearLayout xmlns:android="http://sch ...
- hdu - 4974 - A simple water problem(贪心 + 反证)
题意:N个队(N <= 100000),每一个队有个总分ai(ai <= 1000000),每场比赛比赛两方最多各可获得1分,问最少经过了多少场比赛. 题目链接:http://acm.hd ...
- TCP/IP详解 卷一(第十八章 TCP连接的建立和终止)
建立连接 建立一个TCP连接时会发生下述情况 1.客户TCP发送一个SYN(同步)分节,它告诉服务器将在(待建立)连接中发送的数据的初始序列号. 2.服务器确认(ACK)客户的SYN,同时自己也得发送 ...
- iOS应用程序开发之内购
内购简介 配置iTunes Connect iOS客户端开发工作 一.内购简介 1⃣️通过苹果应用程序商店有三种主要赚钱的方式: –直接收费(与国内大部分用户的消费习惯相悖,如果直接收费,不要设置为6 ...
- Pycharm中的scrapy安装教程
在利用pycharm安装scrapy包是遇到了挺多的问题.在折腾了差不多折腾了两个小时之后总算是安装好了.期间各种谷歌和百度,发现所有的教程都是利用命令行窗口安装的.发现安装scrapy需要的包真是多 ...