Metro应用Json数据处理
Windows Phone 8 或者 Windows 8 平台对JSON数据的处理方式基本是一致的,需要使用DataContractJsonSerializer类将对象的实例序列化为JSON字符串,并将字符串反序列化为对象的实例,需要注意的此种处理方式要求Json数据的格式固定的。
Json字符串 => 对象
针对以下Json字符串进行数据对象的构造解析
{
"name": "ZhangHui",
"sex": "男",
"cnblogs": {
"address": "http://www.cnblogs.com/huizhang212/",
"age": 2,
"nickname": "宇之乐"
},
"contacts": [
{
"type": "QQ",
"number": "411300114"
},
{
"type": "Email",
"number": "huizhang212@163.com"
}
]
}
1.构造对象
分析上面json数据的格式,可以发现其中包含子对象cnblogs和子对象数组contacts,所以需要构造两个子对象Cnblogs和Contact,对象代码如下:
/// <summary>
/// 人员博客园论坛信息
/// </summary>
[DataContract]
public class Cnblogs
{
[DataMember]
public String nickname { get; set; }
[DataMember]
public int age { get; set; }
[DataMember]
public String address { get; set; }
} /// <summary>
/// 人员电话号码信息对象
/// </summary>
[DataContract]
public class Contact
{
[DataMember]
public String type { get; set; }
[DataMember]
public String number { get; set; }
}
子对象构建完成后,构建json数据对应的对象,记为:Person,代码如下:
/// <summary>
/// 人员信息对象
/// </summary>
[DataContract]
public class Person
{
[DataMember]
public String name { get; set; }
[DataMember]
public String sex { get; set; }
[DataMember]
public Cnblogs cnblogs { get; set; }
[DataMember]
public List<Contact> contacts { get; set; }
}
构造对象必须有[DataContract]声明,在通过DataContractJsonSerializer进行序列号或者反序列号的过程中只对有[DataMember]声明的属性生效,没有[DataMember]声明的属性将会被忽略,对象属性的大小写需要和json数据对应字段保持一致,否则该属性的值无法获取。
2.Json字符串转换Person对象的转换函数实现
/// <summary>
/// 解析json数据转化为Person对象
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public Person getPersionByJson(String json)
{
if (String.IsNullOrEmpty(json))
{
return null;
} try
{
Person info = new Person();
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
DataContractJsonSerializer ser = new DataContractJsonSerializer(info.GetType());
info = ser.ReadObject(ms) as Person;
return info;
}
catch
{ }
return null;
}
3.调用getPersionByJson方法将Json字符串转换为对象
//Json数据
String json =
@"{
""name"": ""ZhangHui"",
""sex"": ""男"",
""cnblogs"": {
""address"": ""http://www.cnblogs.com/huizhang212/"",
""age"": 2,
""nickname"": ""宇之乐""
},
""contacts"": [
{
""type"": ""QQ"",
""number"": ""411300114""
},
{
""type"": ""Email"",
""number"": ""huizhang212@163.com""
}
]
}";
//json数据转换为Person对象
Person person = getPersionByJson(json);
对象 => Json字符串
通过DataContractJsonSerializer可以直接将对象转换为Json字符串。
1.Person对象转换Json字符串的函数实现
/// <summary>
/// 获Person对象的Json数据
/// </summary>
/// <param name="normal"></param>
/// <returns></returns>
public String getJsonByPerson(Person person)
{
String json = String.Empty;
try
{
MemoryStream ms = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(person.GetType());
ser.WriteObject(ms, person);
ms.Position = ;
using (StreamReader s = new StreamReader(ms))
{
json = s.ReadToEnd();
}
}
catch
{ }
return json;
}
2.调用getJsonByPerson方法将Person对象转换为Json字符串
//构建一个Persion对象
Person person = new Person()
{
name = "ZhangHui",
sex = "男",
cnblogs = new Cnblogs()
{
nickname = "宇之乐",
age = ,
address = "http://www.cnblogs.com/huizhang212/"
},
contacts = new List<Contact>()
{
new Contact(){ type="QQ", number="" },
new Contact(){ type="Email", number="huizhang212@163.com" }
}
};
//转换为json数据
String personJson = getJsonByPerson(person);
Metro应用Json数据处理的更多相关文章
- 【多端应用开发系列1.1.1 —— Android:使用新浪API V2】服务器Json数据处理——Json数据概述
[前白] 一些基础的东西本系列中就不再详述了,争取尽量写些必不可少的技术要点. 由于本系列把Web Service 构建放到了第二部分,Android项目就采用新浪微博API v2作为服务器端. [原 ...
- iOS开发——数据解析Swift篇&简单json数据处理
简单json数据处理 //loadWeather var url = NSURL(string: "http://www.weather.com.cn/adat/sk/101240701.h ...
- Spark SQL JSON数据处理
背景 这一篇可以说是“Hive JSON数据处理的一点探索”的兄弟篇. 平台为了加速即席查询的分析效率,在我们的Hadoop集群上安装部署了Spark Server,并且与我们的Hive数据仓 ...
- python接口自动化(十九)--Json 数据处理---实战(详解)
简介 上一篇说了关于json数据处理,是为了断言方便,这篇就带各位小伙伴实战一下.首先捋一下思路,然后根据思路一步一步的去实现和实战,不要一开始就盲目的动手和无头苍蝇一样到处乱撞,撞得头破血流后而放弃 ...
- JSON数据处理框架Jackson精解第一篇-序列化与反序列化核心用法
Jackson是Spring Boot默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制.它提供了很 ...
- ASP.MVC时间类型json数据处理
服务端返回DateTime属性如果用自带的json方法返回的数据如下: 有2种办法解决一种是采用服务端解决方案,一种是使用前端解决方案 1.前端解决方案 第一步:对Date进行扩展 // 对Date的 ...
- Qt json 数据处理
用到的头文件 #include <QJsonArray> #include <QJsonDocument> #include <QJsonObject> json解 ...
- json数据处理实战:Kafka+Flume+Morphline+Solr+Hue数据组合索引
背景:Kafka消息总线的建成,使各个系统的数据得以在kafka节点中汇聚,接下来面临的任务是最大化数据的价值,让数据“慧”说话. 环境准备: Kafka服务器*3. CDH 5.8.3服务器*3,安 ...
- Json数据处理
1.字符串转换为Json数组:取json对象属性值. String st="[{"tradeDate":"2016-09-27","trad ...
随机推荐
- 我为什么鼓励工程师写blog
文/JoeyChen 工程师该怎样才能突破自己的能力瓶颈?写 blog! 工程师该怎样精进自己在职涯上所需要的能力?写 blog! 工程师该怎样才能保持学习与成长的动能?写 blog! 工程师该怎样才 ...
- [CF1111D]Destroy the Colony
题目大意:有一个长度为$n(n\leqslant10^5,n=0\pmod2)$的字符串,字符集大小为$52$,有$q(q\leqslant10^5)$次询问,每次询问第$x,y$个字符在这个字符串的 ...
- 使用Ajax内容签名,减少流量浪费
前端UI界面用Ajax获取数据内容的时候,一般是直接获取内容数据并填充,不管内容有无变化,不管数据量多大,都是直接重新加载数据,例如定时刷新公告等. 今天在浏览器控制台调试的时候,发现动态刷新内容,其 ...
- Hbase(六) hbase Java API
一. 几个主要 Hbase API 类和数据模型之间的对应关系: 1. HBaseAdmin关系: org.apache.hadoop.hbase.client.HBaseAdmin作用:提供了一个接 ...
- bzoj5055: 膜法师(BIT)
大水题WA了两发T T 记录一下a[i]的前缀和,a[i]*a[j]就是sigma(a[j]*sumi[j-1]) 记录一下a[i]*a[j]的前缀和,a[i]*a[j]*a[k]就是sigma(a[ ...
- 【arc075F】Mirrored
Portal --> arc075_f Solution 一开始抱着"我有信仰爆搜就可以过"的心态写了一个爆搜.. 但是因为..剪枝和枚举方式不够优秀愉快T掉了q ...
- python函数:字符串函数示例
优先掌握的操作 #作用:名字,性别,国籍,地址等描述信息 #定义:在单引号\双引号\三引号内,由一串字符组成 name='egon' #优先掌握的操作: #1.按索引取值(正向取+反向取) :只能取 ...
- Codeforces Round #416 (Div. 2)A B C 水 暴力 dp
A. Vladik and Courtesy time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- Hdu5226 Tom and matrix
Tom and matrix Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 洛谷P3740 [HAOI2014]贴海报
题目描述 Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委员会为选民准备了一个张贴海报的electoral墙. 张贴规则如下: electo ...