.net已经集成了json解析,类名叫DataContractJsonSerializer

DataContractJsonSerializer 类型公开以下成员。

  名称 说明
DataContractJsonSerializer(Type) 初始化 DataContractJsonSerializer 类的新实例,以便序列化或反序列化指定类型的对象。
DataContractJsonSerializer(Type, IEnumerable<Type>) 初始化 DataContractJsonSerializer 类的新实例,以便序列化或反序列化指定类型的对象以及可在对象图中呈现的已知类型的集合。
属性

 
  名称 说明
Equals(Object) 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
Finalize 允许对象在垃圾回收对 Object 进行回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
GetHashCode 用作特定类型的哈希函数。 (继承自 Object。)
GetType 获取当前实例的 Type。 (继承自 Object。)
MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)
ReadObject 以 JSON(JavaScript 对象表示法)格式读取文档流,并返回反序列化的对象。
ToString 返回表示当前对象的字符串。 (继承自 Object。)
WriteObject 将指定对象序列化为 JavaScript 对象表示法 (JSON) 数据,并将生成的 JSON 写入流中。
 

可以使用 DataContractJsonSerializer 类将类型实例序列化为 JSON 文档,并将 JSON 文档反序列化为类型实例。 例如,可以使用包含重要数据(如名称和地址)的属性创建一个名为 Person 的类型。 然后,可以创建和操作一个 Person 类实例,并在 JSON 文档中写入所有其属性值以便于以后检索。 可随后将该 JSON 文档反序列化为 Person 类,或者反序列化为另一个具有等效数据协定的类。

示例

 
 

namespace SL_DataContractJsonSerializer
{
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
} //This uses an event handler, not SL data binding
void OnClick(object sender, EventArgs args)
{
txtOutput1.Text = "Create a User object and serialize it.";
string json = WriteFromObject();
txtOutput2.Text = json.ToString(); // Displays: {"Age":42,"Name":"Bob"} txtOutput3.Text = "Deserialize the data to a User object.";
string jsonString = "{'Name':'Bill', 'Age':53}";
User deserializedUser = ReadToObject(jsonString);
txtOutput4.Text = deserializedUser.Name; // Displays: Bill
txtOutput5.Text = deserializedUser.Age.ToString(); // Displays: 53
}
// Create a User object and serialize it to a JSON stream.
public static string WriteFromObject()
{
//Create User object.
User user = new User("Bob", ); //Create a stream to serialize the object to.
MemoryStream ms = new MemoryStream(); // Serializer the User object to the stream.
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User));
ser.WriteObject(ms, user);
byte[] json = ms.ToArray();
ms.Close();
return Encoding.UTF8.GetString(json, , json.Length); } // Deserialize a JSON stream to a User object.
public static User ReadToObject(string json)
{
User deserializedUser = new User();
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedUser.GetType());
deserializedUser = ser.ReadObject(ms) as User;
ms.Close();
return deserializedUser;
} } [DataContract]
public class User
{
[DataMember]
public string Name { get; set; } [DataMember]
public int Age { get; set; } public User() { } public User(string newName, int newAge)
{
Name = newName;
Age = newAge;
} } }

Silverlight

受以下版本支持:5、4、3

Silverlight for Windows Phone

受以下版本支持:Windows Phone OS 7.1、Windows Phone OS 7.0

XNA Framework

受以下版本支持:Windows Phone OS 7.0

WP8.1学习系列(第二十四章)——Json解析的更多相关文章

  1. WP8.1学习系列(第二十二章)——在页面之间导航

    在本文中 先决条件 创建导航应用 Frame 和 Page 类 页面模板中的导航支持 在页面之间传递信息 缓存页面 摘要 后续步骤 相关主题 重要的 API Page Frame Navigation ...

  2. WP8.1学习系列(第二十五章)——控件样式

      XAML 框架提供许多自定义应用外观的方法.通过样式可以设置控件属性,并重复使用这些设置,以便保持多个控件具有一致的外观. 路线图: 本主题与其他主题有何关联?请参阅: 使用 C# 或 Visua ...

  3. WP8.1学习系列(第二十六章)——控件模板

    在本文中 自定义控件模板示例 指定控件的可视结构. 指定控件的可视行为 使用工具轻松处理主题 控件和辅助功能 了解有关控件默认模板的详细信息 控件模板中的主题资源 相关主题 在 XAML 框架中,如果 ...

  4. WP8.1学习系列(第十九章)——事件和路由事件概述

    我们将介绍在使用 C#.Visual Basic 或 Visual C++ 组件扩展 (C++/CX) 作为编程语言并使用 XAML 进行 UI 定义时,针对 Windows 运行时应用的事件的编程概 ...

  5. WP8.1学习系列(第十六章)——交互UX之命令模式

    命令模式   在本文中 命令类型 命令放置 相关主题 你可以在应用商店应用的几个曲面中放置命令和控件,包括应用画布.弹出窗口.对话框和应用栏.在正确的时间选择合适的曲面可能就是易于使用的应用和很难使用 ...

  6. WP8.1学习系列(第十二章)——全景控件Panorama开发指南

    2014/6/18 适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1 全景体验是本机 Windows ...

  7. 【WPF学习】第二十四章 基于范围的控件

    WPF提供了三个使用范围概念的控件.这些控件使用在特定最小值和最大值之间的数值.这些控件——ScrollBar.ProgressBar以及Slider——都继承自RangeBase类(该类又继承自Co ...

  8. “全栈2019”Java多线程第二十四章:等待唤醒机制详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  9. “全栈2019”Java第二十四章:流程控制语句中决策语句switch下篇

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. CI框架 -- 核心文件 之 config.php

    Config:该文件包含CI_Config类,这个类包含启用配置文件来管理的方法 /** * 加载配置文件 * * @param string $file 配置文件名 * @param bool $u ...

  2. ubuntu -- 安装memcached

    Memcached的安装依赖libevent.它是memcached所依赖的异步事件通知库,因此在安装memcached之前先要安装libevent. ubuntu安装软件的方法通常有两种 第一种:使 ...

  3. 如何允许你的应用移动到SD卡?(转至http://blog.csdn.net/feng88724/article/details/6946670)

    我们在使用Android手机时发现,有的程序允许被移动到SD卡,而有的不行?这是为什么呢? 因为在Android 2.2版之后, Android应用才被允许移动到SD卡中.而在此之前开发的应用,全部没 ...

  4. Kong安装简介

    评价:其实是一个整合型的方案,从它的安装页面看:http://getkong.org/download/#other该方案基于OpenResty,和lua 提供的功能是统一的Oauth认证.rest封 ...

  5. linux中iptables的用法

    iptables基本操作笔记 一.基本操作 #启动防火墙 service iptables start #停止防火墙 service iptables stop #重启防火墙 service ipta ...

  6. linux中kill命令

    Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须 ...

  7. Mac或者linux下登陆到linux上的SFTP

    登陆 sftp  -i  密钥路径  用户@ip ➜  ~ sftp -i Desktop/aliyun.pem root@39.106.30.1 Connected to 39.106.30.1 上 ...

  8. IE8下submit表单没反应

    当在IE8浏览器下,例如以下代码<input type="submit" value="sub" />点击没反应.通常是因为表单里面嵌套了表单造成的 ...

  9. LR进行接口测试

    其实无论用那种测试方法,接口测试的原理是通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一个过程. 方法一.用Lo ...

  10. Greenplum-cc-web监控软件安装时常见错误

     错误error: 1.no pg_hba.conf entry for host “::1”, user “gpmon”, database “gpperfmon”, SSL off 解决: vi ...