稳扎稳打Silverlight(19) - 2.0通信之调用REST服务,处理JSON格式, XML格式, RSS/ATOM格式的数据

简介:
[索引页]
[源码下载]


稳扎稳打Silverlight(19) - 2.0通信之调用REST服务,处理JSON格式, XML格式, RSS/ATOM格式的数据


作者: webabcd


介绍
Silverlight 2.0 调用REST服务,处理JSON格式, XML格式, RSS/ATOM格式的数据
    通过 System.Net.WebClient 类调用 REST 服务
    通过 System.Json 命名控件下的类处理 JSON 数据
    通过 System.Xml.Linq 命名空间下的类(LINQ to XML)处理 XML 数据
    通过 System.ServiceModel.Syndication 命名空间下的类处理 RSS/ATOM 数据


在线DEMO
http://webabcd.blog.51cto.com/1787395/342779


示例
1、调用 REST 服务,返回 JSON 数据
REST.cs(WCF创建的REST服务)
using System; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.ServiceModel.Activation; 
 
using System.ServiceModel.Web; 
using System.Collections.Generic; 
using System.Text; 
using System.IO; 
 
/// <summary> 
/// 提供 REST 服务的类 
/// 注:Silverlight只支持 GET 和 POST 
/// </summary> 
[ServiceContract] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public  class REST 

         /// <summary> 
         /// 用于演示返回 JSON(对象) 的 REST 服务 
         /// </summary> 
         /// <param name="name"></param> 
         /// <returns></returns> 
        [OperationContract] 
        [WebGet(UriTemplate =  "User/{name}/json", ResponseFormat = WebMessageFormat.Json)] 
         public User HelloJson( string name) 
        { 
                 return  new User { Name = name, DayOfBirth =  new DateTime(1980, 2, 14) }; 
        } 
 
         /// <summary> 
         /// 用于演示返回 JSON(集合) 的 REST 服务 
         /// </summary> 
         /// <returns></returns> 
        [OperationContract] 
        [WebGet(UriTemplate =  "Users/json", ResponseFormat = WebMessageFormat.Json)] 
         public List<User> HelloJson2() 
        { 
                 return  new List<User>    
                {    
                         new User(){ Name =  "webabcd01", DayOfBirth =  new DateTime(1980, 1, 1) }, 
                         new User(){ Name =  "webabcd02", DayOfBirth =  new DateTime(1980, 2, 2) }, 
                         new User(){ Name =  "webabcd03", DayOfBirth =  new DateTime(1980, 3, 3) }, 
                }; 
        } 
}
 
Json.xaml 
<UserControl x:Class="Silverlight20.Communication.Json" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
        <StackPanel HorizontalAlignment="Left" Width="600"> 
         
                <TextBox x:Name="txtMsgJson" Margin="5" /> 
                <TextBox x:Name="txtMsgJson2" Margin="5" />    
                 
        </StackPanel> 
</UserControl>
 
Json.xaml.cs
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 
 
using System.IO; 
 
namespace Silverlight20.Communication 

         public partial  class Json : UserControl 
        { 
                 public Json() 
                { 
                        InitializeComponent(); 
 
                         // 演示如何处理 JSON(对象) 
                        JsonDemo(); 
 
                         // 演示如何处理 JSON(集合) 
                        JsonDemo2(); 
                } 
 
                 /// <summary> 
                 /// 演示如何处理 JSON(对象) 
                 /// </summary> 
                 void JsonDemo() 
                { 
                         // REST 服务的 URL 
                        Uri uri =  new Uri( "http://localhost:3036/REST.svc/User/webabcd/json", UriKind.Absolute); 
 
                        // 实例化 WebClient 
                        System.Net.WebClient client = new System.Net.WebClient(); 
 
                        client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(json_DownloadStringCompleted); 
                        client.DownloadStringAsync(uri); 
 
                        txtMsgJson.Text = "读取 JSON(对象) 数据中。。。"
                } 
 
                void json_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
                { 
                        if (e.Error != null
                        { 
                                // 发生错误的话,则打印出来 
                                txtMsgJson.Text = e.Error.ToString(); 
                                return
                        } 
 
                        // 将获得的字符串转换为 JSON(对象) 
                        var buffer = System.Text.Encoding.UTF8.GetBytes(e.Result); 
                        var ms = new MemoryStream(buffer); 
                        var jsonObject = System.Json.JsonObject.Load(ms) as System.Json.JsonObject; 
 
                        txtMsgJson.Text = e.Result + "\r\n"
                        // 解析 JSON(对象) 
                        txtMsgJson.Text += string.Format("姓名: {0}, 生日: {1}"
                                (string)jsonObject["Name"], 
                                ((DateTime)jsonObject["DayOfBirth"]).ToString("yyyy-MM-dd")); 
 
                        /*    
                         * 总结: 
                         * JsonObject - 一个具有零或多个 key-value 对的无序集合。继承自抽象类 JsonValue 
                         *         JsonObject.Load(Stream) - 将指定的字符串流反序列化为 JSON 对象(CLR可用的类型) 
                         *         JsonObject[key] - JsonObject 索引器,获取 JsonObject 的指定key的value 
                         *         JsonObject.ContainsKey(key) - JsonObject 对象内是否具有指定的key 
                         */
 
                } 
 
                /// <summary> 
                /// 演示如何处理 JSON(集合) 
                /// </summary> 
                void JsonDemo2() 
                { 
                        // REST 服务的 URL 
                        Uri uri = new Uri("http://localhost:3036/REST.svc/Users/json", UriKind.Absolute); 
 
                        // 实例化 WebClient 
                        System.Net.WebClient client = new System.Net.WebClient(); 
 
                        client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(json2_DownloadStringCompleted); 
                        client.DownloadStringAsync(uri); 
 
                        txtMsgJson2.Text = "读取 JSON(集合) 数据中。。。"
                } 
 
                void json2_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
                { 
                        if (e.Error != null
                        { 
                                // 发生错误的话,则打印出来 
                                txtMsgJson2.Text = e.Error.ToString(); 
                                return
                        } 
 
                        // 将获得的字符串转换为 JSON(集合) 
                        var buffer = System.Text.Encoding.UTF8.GetBytes(e.Result); 
                        var ms = new MemoryStream(buffer); 
                        var jsonArray = System.Json.JsonArray.Load(ms) as System.Json.JsonArray; 
 
                        txtMsgJson2.Text = e.Result + "\r\n"
                        txtMsgJson2.Text += string.Format("姓名: {0}, 生日: {1}"
                                (string)jsonArray.First()["Name"], 
                                ((DateTime)jsonArray.Single(p => p["Name"] == "webabcd02")["DayOfBirth"]).ToString("yyyy-MM-dd")); 
 
                        /*    
                         * 总结: 
                         * JsonArray - 一个具有零或多个 JsonValue(抽象类,JsonObject和JsonArray都继承自此类) 对象的有序序列 
                         *         JsonArray.Load(Stream) - 将指定的字符串流反序列化为 JSON 对象(CLR可用的类型) 
                         *         JsonArray[index] - JsonArray 索引器,获取 JsonArray 的指定索引的 JsonValue 
                         *         JsonArray 支持 LINQ 
                         */
 
                } 
        } 
}
 
 
 
 


     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/343114 ,如需转载请自行联系原作者
相关文章
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
179 1
|
XML JSON 前端开发
【Web前端揭秘】XML与JSON:数据界的双雄对决,你的选择将如何改写Web世界的未来?
【8月更文挑战第26天】本文深入探讨了XML和JSON这两种广泛使用的数据交换格式在Web前端开发中的应用。XML采用自定义标签描述数据结构,适用于复杂层次数据的表示,而JSON则以键值对形式呈现数据,更为轻量且易解析。通过对两种格式的示例代码、结构特点及应用场景的分析,本文旨在帮助读者更好地理解它们的差异,并根据实际需求选择最合适的数据交换格式。
234 1
|
XML JSON 数据处理
C# 中的 XML 与 JSON 数据处理
在现代软件开发中,数据交换和存储需求日益增长,XML 和 JSON 成为最常用的数据格式。本文从 C# 角度出发,详细介绍如何处理这两种格式,并提供示例代码。对于 XML,我们介绍了读取、创建和写入 XML 文件的方法;对于 JSON,则展示了如何使用 Newtonsoft.Json 库进行数据解析和序列化。此外,文章还总结了常见问题及其解决方案,帮助开发者更好地应对实际项目中的挑战。
360 61
C# 中的 XML 与 JSON 数据处理
|
XML JSON 前端开发
基于若依的ruoyi-nbcio流程管理系统仿钉钉流程json转bpmn的flowable的xml格式(支持并行网关)
基于若依的ruoyi-nbcio流程管理系统仿钉钉流程json转bpmn的flowable的xml格式(支持并行网关)
989 3
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
3187 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
2308 0
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
496 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
XML 存储 JSON
(十二)探索高性能通信与RPC框架基石:Json、ProtoBuf、Hessian序列化详解
如今这个分布式风靡的时代,网络通信技术,是每位技术人员必须掌握的技能,因为无论是哪种分布式技术,都离不开心跳、选举、节点感知、数据同步……等机制,而究其根本,这些技术的本质都是网络间的数据交互。正因如此,想要构建一个高性能的分布式组件/系统,不得不思考一个问题:怎么才能让数据传输的速度更快?
730 1
|
Java Spring 容器
彻底改变你的编程人生!揭秘 Spring 框架依赖注入的神奇魔力,让你的代码瞬间焕然一新!
【8月更文挑战第31天】本文介绍 Spring 框架中的依赖注入(DI),一种降低代码耦合度的设计模式。通过 Spring 的 DI 容器,开发者可专注业务逻辑而非依赖管理。文中详细解释了 DI 的基本概念及其实现方式,如构造器注入、字段注入与 setter 方法注入,并提供示例说明如何在实际项目中应用这些技术。通过 Spring 的 @Configuration 和 @Bean 注解,可轻松定义与管理应用中的组件及其依赖关系,实现更简洁、易维护的代码结构。
288 0
|
XML JSON 前端开发
初学者指南:JSON 和 XML 的区别
当我们讨论数据交换格式时,JSON(JavaScript对象表示法)和 XML(可扩展标记语言)无疑是最受欢迎的两种选择。这两者各有优点和缺点,根据具体的应用场景,选择合适的格式可以显著提高开发效率和系统性能。