`
bolutes
  • 浏览: 870615 次
文章分类
社区版块
存档分类
最新评论

第16课 数据与通信之JSON

 
阅读更多

概述

本文将简单介绍在Silverlight 2中对于JSON的支持。

简单示例

在本文中我们仍然采用前面两篇文章中用过的显示最新随笔这样一个示例(举一反三嘛:)),最终完成的效果如下图所示:

TerryLee_Silverlight2_0065

首先我们建立服务端,以便能够提供JSON格式的数据。在这里为了产生JSON格式的数据,我们借助于一个开源项目Json.NET。建立两个实体类型:

public class Post
{
    public int Id { get; set; }

    public string Title { get; set; }

    public string Author { get; set; }
}
public class Blog
{
    public ListPost> Posts { get; set; }
}

在Silverlight项目中我们也会使用到这两个实体类,新建一个HttpHandler,产生JSON格式数据,我们使用Json.NET中的JavaScriptConvert.SerializeObject方法即可序列化一个对象为JSON格式:

public class BlogHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";

        ListPost> posts = new ListPost>()
        {
            new Post{ Id=1, Title="一步一步学Silverlight 2系列(13):数据与通信之WebRequest", Author="TerryLee" },
            new Post{ Id=2, Title="一步一步学Silverlight 2系列(12):数据与通信之WebClient", Author="TerryLee" },
            new Post{ Id=3, Title="一步一步学Silverlight 2系列(11):数据绑定", Author="TerryLee" },
            new Post{ Id=4, Title="一步一步学Silverlight 2系列(10):使用用户控件", Author="TerryLee" },
            new Post{ Id=5, Title="一步一步学Silverlight 2系列(9):使用控件模板", Author="TerryLee" },
            new Post{ Id=6, Title="一步一步学Silverlight 2系列(8):使用样式封装控件观感", Author="TerryLee" }
        };

        Blog blog = new Blog();
        blog.Posts = posts;

        context.Response.Write(JavaScriptConvert.SerializeObject(blog));
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

现在测试一下HttpHandler,查看一下生成的数据格式:

TerryLee_Silverlight2_0073

对这些数据格式化一下,看起来更明显,这里推荐一个在线JSON数据格式化工具http://www.curiousconcept.com/jsonformatter/

TerryLee_Silverlight2_0075

格式化后的数据如下:

TerryLee_Silverlight2_0076

现在实现在Silverlight中获取JSON数据,并进行反序列化,界面布局XAML就不再贴出来了,跟前面两篇的示例一样。在Silverlight 2中,内置了对于JSON的支持,通过命名空间System.Runtime.Serialization.Json提供,位于System.ServiceModel.Web.dll中。

我们使用WebRequest获取数据:

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    Uri endpoint = new Uri("http://localhost:8081/BlogHandler.ashx");

    WebRequest request = WebRequest.Create(endpoint);
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    request.BeginGetResponse(new AsyncCallback(ResponseReady), request);
}

void ResponseReady(IAsyncResult asyncResult)
{
    WebRequest request = asyncResult.AsyncState as WebRequest;
    WebResponse response = request.EndGetResponse(asyncResult);

    using (Stream responseStream = response.GetResponseStream())
    {
        DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Blog));

        Blog blog = jsonSerializer.ReadObject(responseStream) as Blog;

        Posts.ItemsSource = blog.Posts;
    }
}

DataContractJsonSerializer用于将对象序列化为JSON或者反序列化为对象实例,分别使用方法WriteObject和ReadObject。

TerryLee_Silverlight2_0074

至此一个完整的在Silverlight 2对于JSON的支持示例就完成了。运行后的效果与前面的示例一样:

TerryLee_Silverlight2_0065

结束语

本文简单介绍了在Silverlight 2中对于JSON的支持,DataContractJsonSerializer用于将对象序列化为JSON或者反序列化为对象实例,你可以从这里下载本文示例代码。

分享到:
评论

相关推荐

    8天快速掌握Android系列视频之04_开发与 运行(卸载)第一个ANDROID应用

    端,26_采用JSON格式返回数据给资讯客户端,27_网络通信之通过GET和POST方式提交参数给web应用,28_网络通信之通过 HTTP协议实现文件上传,29_发送xml数据和调用webservice,30_多线程下载原理。。。

    8天快速掌握Android系列视频之07_查看应用输出的错误信息 与如何部署应用到真实手机

    端,26_采用JSON格式返回数据给资讯客户端,27_网络通信之通过GET和POST方式提交参数给web应用,28_网络通信之通过 HTTP协议实现文件上传,29_发送xml数据和调用webservice,30_多线程下载原理。。。

    基于c++实现的高性能json解析器源码+项目说明+exe.tar

    2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,也适用于...

    ActionScript 3.0 开发人员指南 (AS3开发帮助文档)

    第 45 章 : 与其他 Flash Player 和 AIR 实例通信 第 46 章 : 与 AIR 中的本机进程通信 第 47 章 : 使用外部 API 第 48 章 : AIR 中的 XML 签名验证 第 49 章 : 客户端系统环境 第 50 章 : AIR 应用程序的调用...

    python入门到高级全栈工程师培训 第3期 附课件代码

    第16章 01 上节课回顾 02 函数作用域 03 函数作用域补充 04 匿名函数 05 函数式编程介绍 06 函数式编程尾递归调用优化 07 map函数 08 map函数filter函数 09 reduce函数 10 map reduce filter总结 11 内置函数part1 ...

    使用rails6 开发纯后端 API 项目

    适用于目前流行的使**用http或https协议**通信并使用**json作为数据交互**的**restful风格**的**前后端分离**项目。使用的技术栈包括 L N M R R【linux nginx mysql redis ruby 】 等! 本书分为13大章节 - 第一章...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    Json与pickle数据序列化 软件目录结构规范 本周作业 第5周 心灵分享 ATM存钱取钱案例剖析 模块定义、导入、优化详解 内置模块详解之time与datetime模块 内置模块详解之Range模块 内置模块详解之OS模块 内置模块...

    传智播客的android开发源代码

    04_开发与运行(卸载)第一个ANDROID应用.avi 所在项目:Hello 06_电话拔号器.avi 所在项目:phone 08_短信发送器.avi 所在项目:sms 09_深入了解各种布局技术.avi 所在项目:sms & FrameLayout 10_对应用进行单元...

    source.zip

    04_开发与运行(卸载)第一个ANDROID应用.avi 所在项目:Hello 06_电话拔号器.avi 所在项目:phone 08_短信发送器.avi 所在项目:sms 09_深入了解各种布局技术.avi 所在项目:sms & FrameLayout 10_对应用进行单元...

    8天快速掌握Android教程源码

    04_开发与运行(卸载)第一个ANDROID应用.avi 所在项目:Hello 06_电话拔号器.avi 所在项目:phone 08_短信发送器.avi 所在项目:sms 09_深入了解各种布局技术.avi 所在项目:sms & FrameLayout 10_对应用进行单元...

    R的极客理想:工具篇 带书签扫描版(2/2)

    4.1 Rserve与Java的跨平台通信 122 4.2 Rsession让Java调用R更简单 126 4.3 解惑rJava R与Java的高速通道 132 4.4 Node.js与R跨平台通信 137 第5章 R的服务器实现 143 5.1 R语言服务器程序Rserve详解 143 5.2 ...

    R的极客理想:工具篇 带书签扫描版(1/2)

    4.1 Rserve与Java的跨平台通信 122 4.2 Rsession让Java调用R更简单 126 4.3 解惑rJava R与Java的高速通道 132 4.4 Node.js与R跨平台通信 137 第5章 R的服务器实现 143 5.1 R语言服务器程序Rserve详解 143 5.2 ...

    大型分布式网站架构与实践

     如何采用摘要认证方式防止信息篡改、通过数字签名验证通信双方的合法性,以及通过HTTPS协议保障通信过程中数据不被第三方监听和截获。  在开放平台体系下,OAuth协议如何保障ISV对数据的访问是经过授权的合法行为...

    Android典型技术模块开发详解

    第16章 程序优化 16.1 Java内存管理 16.1.1 垃圾回收 16.1.2 内存分配 16.2 Android优化 16.2.1 内存分配跟踪Allocation Tracker 16.2.2 内存监控Heap 16.2.3 内存分析MAT 16.2.4 如何避免内存泄漏 16.3 ...

    Android开发案例驱动教程 配套代码

    第16章 Google Map和定位服务 405 16.1 MyMap服务系统案例 405 16.2 Android Google Map 406 16.2.1 申请Google Map Android API Key 407 16.2.2 编写Android Google Map骨架程序 409 16.2.3 控制地图 412 ...

    python cookbook(第3版)

    5.20 与串行端口的数据通信 5.21 序列化Python对象 第六章:数据编码和处理 6.1 读写CSV数据 6.2 读写JSON数据 6.3 解析简单的XML数据 6.4 增量式解析大型XML文件 6.5 将字典转换为XML 6.6 解析和修改XML ...

    Ajax编程技术PPT资料打包

    Ajax编程技术 打包的PPT资料,全面讲解Ajax。 第一章 Ajax简介 第二章 JavaScript相关要点 第三章 Ajax和服务器端技术 第四章 Ajax技术 第五章 XML要点 第六章 调试与错误处理 ...第十一章 JSON

Global site tag (gtag.js) - Google Analytics