JSON/XML序列化与反序列化(非构造自定义类)
隔了很长时间再重看自己的代码,觉得好陌生。。以后要养成多注释的好习惯。。直接贴代码。。对不起( ▼-▼ )
保存保存:进行序列化后存入应用设置里
ApplicationDataContainer _appSettings = ApplicationData.Current.LocalSettings; //这个是保存一些页面输入信息
private async void Save_Click(object sender, RoutedEventArgs e)
{
if (userName.Text == "" || userAge.Text == "")
{
await new MessageDialog("请输入完整的信息").ShowAsync();
return;
}
ObservableCollection<School> education = new ObservableCollection<School>();
if (school1.IsChecked == true)
education.Add(new School() { Id = "id001", Name = school1.Content.ToString() });
if (school2.IsChecked == true)
{
education.Add(new School() { Id = "id002", Name = school2.Content.ToString() });
}
User user = new User()
{
Education = education,
Id = Guid.NewGuid().ToString(),//随机生成 前面用到过的
Name = userName.Text,
Age = Int32.Parse(userAge.Text),
Verified = false
}; //使用DataContractJsonDeSeriaLizer实现方式
string json = ToJsonData(user); //带参数的构造函数 //string json = user.Stringify();//这个是构造自定义的类的,此处用不到 info.Text = json;
_appSettings.Values["UserDataKey"] = json; //存放到应用设置里面
await new MessageDialog("保存成功").ShowAsync();
}
获取数据:从应用设置取出,进行反序列化取出信息
private async void Get_Click(object sender, RoutedEventArgs e)
{
if (!_appSettings.Values.ContainsKey("UserDataKey"))
{
await new MessageDialog("未保存信息").ShowAsync();
return;
}
string json = _appSettings.Values[“UserDataKey”].ToString(); //反序列化为实体类对象
User user = DataContractJsonSerializer<User>(json); //User user = new User(json);
string userInfo = "";
userInfo = "Id:" + user.Id + "Name:" + user.Name + "Age:" + user.Age;
foreach (School school in user.Education)
{
userInfo += "Education:" + "Id:" + school.Id + "name:" + school.Name;
}
await new MessageDialog(userInfo).ShowAsync();
} private T DataContractJsonSerializer<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;
}
不贴了。。看的好难受。。以后再也不会这么敷衍了。大家多看看其他的也行。
收获:
ObservableCollection<>相对List<>来说,绑定到ListBox会自动刷新
也就是当你在进行增加、删除操作时,前台会动态的显示。
有需要源码(WP8.1)的可以下载。包含了JSON/Xml的两种(构造与不构造类)操作方式。。
http://files.cnblogs.com/yffswyf/JSONAndXML.rar
JSON/XML序列化与反序列化(非构造自定义类)的更多相关文章
- Json/XML序列化和反序列化
1.json序列化和反序列化 序列化是将对象状态转换为可保持或传输的格式的过程; 反序列化,它将流转换为对象; 1)Json.Net 推荐使用Json.Net类库,需要引入的命名空间; 序列化:Jso ...
- XML 序列化与反序列化
XML序列化与反序列化 1.将一个类转化为XML文件 /// <summary> /// 对象序列化成XML文件 /// </summary> /// <param na ...
- Rest中的XML与JSON的序列化与反序列化
#region 获取XML的序列化和反序列化 /// <summary> /// 对象进行序列化生成XML /// </summary> /// <typeparam n ...
- Newtonsoft.Json 的序列化与反序列化
首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和NHibernate的.我举例说明DataTable的序列化和反序列化.创建一 ...
- 【转】Newtonsoft.Json 的序列化与反序列化
http://www.cnblogs.com/08shiyan/p/3464028.html 首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Fr ...
- Json.Net序列化和反序列化设置
首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和NHibernate的.我举例说明DataTable的序列化和反序列化.创建一 ...
- Json.Net系列教程 3.Json.Net序列化和反序列化设置
原文 Json.Net系列教程 3.Json.Net序列化和反序列化设置 上节补充 首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framewo ...
- .NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)
序列化和反序列化是指什么? 序列化(seriallization): 将对象转化为便于传输的数据格式, 常见的序列化格式:二进制格式,字节数组,json字符串,xml字符串.反序列化(deserial ...
- [.net 面向对象程序设计进阶] (12) 序列化(Serialization)(四) 快速掌握JSON的序列化和反序列化
[.net 面向对象程序设计进阶] (12) 序列化(Serialization)(四) 快速掌握JSON的序列化和反序列化 本节导读: 介绍JSON的结构,在JS中的使用.重点说明JSON如何在.N ...
随机推荐
- karottc A Simple linux-virus Analysis、Linux Kernel <= 2.6.37 - Local Privilege Escalation、CVE-2010-4258、CVE-2010-3849、CVE-2010-3850
catalog . 程序功能概述 . 感染文件 . 前置知识 . 获取ROOT权限: Linux Kernel <= - Local Privilege Escalation 1. 程序功能概述 ...
- [iOS dispatch_once创建单例]
自苹果引入了Grand Central Dispatch (GCD)(Mac OS 10.6和iOS4.0)后,创建单例又有了新的方法,那就是使用dispatch_once函数,当然,随着演进的进行, ...
- eclipse+SVN文件只显示版本号,不显示时间和作者解决办法
SVN默认是显示提交次数的 改成这样 就可以了...
- sed命令给文本文件的每行的行首或者行尾添加文字
在每行的头添加字符,比如"HEAD",命令如下: sed 's/^/HEAD&/g' test.file 在每行的行尾添加字符,比如“TAIL”,命令如下: sed 's/ ...
- 分析python程序运行时间的几种方法
最早见过手写的,类似于下面这种: 1 import datetime 2 3 def time_1(): 4 begin = datetime.datetime.now() 5 sum = 0 6 f ...
- CMD命令之 :修改windows的CMD窗口输出编码格式为UTF-8
修改windows的CMD窗口输出编码格式为UTF-8 转载自 http://xuliduo.iteye.com/blog/639923 dos命令: chcp 65001 就是换成UTF-8代码页 ...
- Python3 学习笔记------迭代器
python 迭代器 要理解python迭代器(iterator),先要理解两个概念:Iterable(可迭代对象).Iterator(迭代器) 先来help()一下Iterator: >> ...
- MySql中时间比较的实现
unix_timestamp 函数可以接受一个参数,也可以不使用参数.它的返回值是一个无符号的整数.不使用参数,它返回自1970年1月1日0时0分0秒到现在所经过的秒数,如果 使用参数,参数的 ...
- Docker探索系列1之docker入门安装与操作
preface docker这种时髦的技术我接触的比较晚,如果不是公司在使用这项技术,估计还得会更晚接触.好了,说下我司现在docker使用的情况.docker在我司是用来跑web服务的,里面的web ...
- 利用Objective-C运行时hook函数的三种方法
版权声明:转载请注明出处:http://blog.csdn.net/hursing 方法一,hook已有公开头文件的类: 首先写一个Utility函数: #import <objc/runtim ...