稳扎稳打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服务)
InBlock.gif using System; 
InBlock.gif using System.Linq; 
InBlock.gif using System.Runtime.Serialization; 
InBlock.gif using System.ServiceModel; 
InBlock.gif using System.ServiceModel.Activation; 
InBlock.gif 
InBlock.gif using System.ServiceModel.Web; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.Text; 
InBlock.gif using System.IO; 
InBlock.gif 
/// <summary> 
/// 提供 REST 服务的类 
/// 注:Silverlight只支持 GET 和 POST 
/// </summary> 
InBlock.gif[ServiceContract] 
InBlock.gif[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
InBlock.gif public  class REST 
InBlock.gif
InBlock.gif         /// <summary> 
InBlock.gif         /// 用于演示返回 JSON(对象) 的 REST 服务 
InBlock.gif         /// </summary> 
InBlock.gif         /// <param name="name"></param> 
InBlock.gif         /// <returns></returns> 
InBlock.gif        [OperationContract] 
InBlock.gif        [WebGet(UriTemplate =  "User/{name}/json", ResponseFormat = WebMessageFormat.Json)] 
InBlock.gif         public User HelloJson( string name) 
InBlock.gif        { 
InBlock.gif                 return  new User { Name = name, DayOfBirth =  new DateTime(1980, 2, 14) }; 
InBlock.gif        } 
InBlock.gif 
InBlock.gif         /// <summary> 
InBlock.gif         /// 用于演示返回 JSON(集合) 的 REST 服务 
InBlock.gif         /// </summary> 
InBlock.gif         /// <returns></returns> 
InBlock.gif        [OperationContract] 
InBlock.gif        [WebGet(UriTemplate =  "Users/json", ResponseFormat = WebMessageFormat.Json)] 
InBlock.gif         public List<User> HelloJson2() 
InBlock.gif        { 
InBlock.gif                 return  new List<User>    
InBlock.gif                {    
InBlock.gif                         new User(){ Name =  "webabcd01", DayOfBirth =  new DateTime(1980, 1, 1) }, 
InBlock.gif                         new User(){ Name =  "webabcd02", DayOfBirth =  new DateTime(1980, 2, 2) }, 
InBlock.gif                         new User(){ Name =  "webabcd03", DayOfBirth =  new DateTime(1980, 3, 3) }, 
InBlock.gif                }; 
InBlock.gif        } 
InBlock.gif}
 
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
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.Linq; 
InBlock.gif using System.Net; 
InBlock.gif using System.Windows; 
InBlock.gif using System.Windows.Controls; 
InBlock.gif using System.Windows.Documents; 
InBlock.gif using System.Windows.Input; 
InBlock.gif using System.Windows.Media; 
InBlock.gif using System.Windows.Media.Animation; 
InBlock.gif using System.Windows.Shapes; 
InBlock.gif 
InBlock.gif using System.IO; 
InBlock.gif 
InBlock.gif namespace Silverlight20.Communication 
InBlock.gif
InBlock.gif         public partial  class Json : UserControl 
InBlock.gif        { 
InBlock.gif                 public Json() 
InBlock.gif                { 
InBlock.gif                        InitializeComponent(); 
InBlock.gif 
InBlock.gif                         // 演示如何处理 JSON(对象) 
InBlock.gif                        JsonDemo(); 
InBlock.gif 
InBlock.gif                         // 演示如何处理 JSON(集合) 
InBlock.gif                        JsonDemo2(); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 演示如何处理 JSON(对象) 
InBlock.gif                 /// </summary> 
InBlock.gif                 void JsonDemo() 
InBlock.gif                { 
InBlock.gif                         // REST 服务的 URL 
InBlock.gif                        Uri uri =  new Uri( "http://localhost:3036/REST.svc/User/webabcd/json", UriKind.Absolute); 
InBlock.gif 
InBlock.gif                        // 实例化 WebClient 
InBlock.gif                        System.Net.WebClient client = new System.Net.WebClient(); 
InBlock.gif 
InBlock.gif                        client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(json_DownloadStringCompleted); 
InBlock.gif                        client.DownloadStringAsync(uri); 
InBlock.gif 
InBlock.gif                        txtMsgJson.Text = "读取 JSON(对象) 数据中。。。"
InBlock.gif                } 
InBlock.gif 
InBlock.gif                void json_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
InBlock.gif                { 
InBlock.gif                        if (e.Error != null
InBlock.gif                        { 
InBlock.gif                                // 发生错误的话,则打印出来 
InBlock.gif                                txtMsgJson.Text = e.Error.ToString(); 
InBlock.gif                                return
InBlock.gif                        } 
InBlock.gif 
InBlock.gif                        // 将获得的字符串转换为 JSON(对象) 
InBlock.gif                        var buffer = System.Text.Encoding.UTF8.GetBytes(e.Result); 
InBlock.gif                        var ms = new MemoryStream(buffer); 
InBlock.gif                        var jsonObject = System.Json.JsonObject.Load(ms) as System.Json.JsonObject; 
InBlock.gif 
InBlock.gif                        txtMsgJson.Text = e.Result + "\r\n"
InBlock.gif                        // 解析 JSON(对象) 
InBlock.gif                        txtMsgJson.Text += string.Format("姓名: {0}, 生日: {1}"
InBlock.gif                                (string)jsonObject["Name"], 
InBlock.gif                                ((DateTime)jsonObject["DayOfBirth"]).ToString("yyyy-MM-dd")); 
InBlock.gif 
InBlock.gif                        /*    
InBlock.gif                         * 总结: 
InBlock.gif                         * JsonObject - 一个具有零或多个 key-value 对的无序集合。继承自抽象类 JsonValue 
InBlock.gif                         *         JsonObject.Load(Stream) - 将指定的字符串流反序列化为 JSON 对象(CLR可用的类型) 
InBlock.gif                         *         JsonObject[key] - JsonObject 索引器,获取 JsonObject 的指定key的value 
InBlock.gif                         *         JsonObject.ContainsKey(key) - JsonObject 对象内是否具有指定的key 
InBlock.gif                         */
 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                /// <summary> 
InBlock.gif                /// 演示如何处理 JSON(集合) 
InBlock.gif                /// </summary> 
InBlock.gif                void JsonDemo2() 
InBlock.gif                { 
InBlock.gif                        // REST 服务的 URL 
InBlock.gif                        Uri uri = new Uri("http://localhost:3036/REST.svc/Users/json", UriKind.Absolute); 
InBlock.gif 
InBlock.gif                        // 实例化 WebClient 
InBlock.gif                        System.Net.WebClient client = new System.Net.WebClient(); 
InBlock.gif 
InBlock.gif                        client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(json2_DownloadStringCompleted); 
InBlock.gif                        client.DownloadStringAsync(uri); 
InBlock.gif 
InBlock.gif                        txtMsgJson2.Text = "读取 JSON(集合) 数据中。。。"
InBlock.gif                } 
InBlock.gif 
InBlock.gif                void json2_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
InBlock.gif                { 
InBlock.gif                        if (e.Error != null
InBlock.gif                        { 
InBlock.gif                                // 发生错误的话,则打印出来 
InBlock.gif                                txtMsgJson2.Text = e.Error.ToString(); 
InBlock.gif                                return
InBlock.gif                        } 
InBlock.gif 
InBlock.gif                        // 将获得的字符串转换为 JSON(集合) 
InBlock.gif                        var buffer = System.Text.Encoding.UTF8.GetBytes(e.Result); 
InBlock.gif                        var ms = new MemoryStream(buffer); 
InBlock.gif                        var jsonArray = System.Json.JsonArray.Load(ms) as System.Json.JsonArray; 
InBlock.gif 
InBlock.gif                        txtMsgJson2.Text = e.Result + "\r\n"
InBlock.gif                        txtMsgJson2.Text += string.Format("姓名: {0}, 生日: {1}"
InBlock.gif                                (string)jsonArray.First()["Name"], 
InBlock.gif                                ((DateTime)jsonArray.Single(p => p["Name"] == "webabcd02")["DayOfBirth"]).ToString("yyyy-MM-dd")); 
InBlock.gif 
InBlock.gif                        /*    
InBlock.gif                         * 总结: 
InBlock.gif                         * JsonArray - 一个具有零或多个 JsonValue(抽象类,JsonObject和JsonArray都继承自此类) 对象的有序序列 
InBlock.gif                         *         JsonArray.Load(Stream) - 将指定的字符串流反序列化为 JSON 对象(CLR可用的类型) 
InBlock.gif                         *         JsonArray[index] - JsonArray 索引器,获取 JsonArray 的指定索引的 JsonValue 
InBlock.gif                         *         JsonArray 支持 LINQ 
InBlock.gif                         */
 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif}
 
 
 
 


     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/343114 ,如需转载请自行联系原作者
相关文章
|
5天前
|
JSON JavaScript Java
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
16 0
|
7天前
|
JSON 数据格式 Python
Python标准库中包含了json模块,可以帮助你轻松处理JSON数据
【4月更文挑战第30天】Python的json模块简化了JSON数据与Python对象之间的转换。使用`json.dumps()`可将字典转为JSON字符串,如`{&quot;name&quot;: &quot;John&quot;, &quot;age&quot;: 30, &quot;city&quot;: &quot;New York&quot;}`,而`json.loads()`则能将JSON字符串转回字典。通过`json.load()`从文件读取JSON数据,`json.dump()`则用于将数据写入文件。
13 1
|
7天前
|
JSON 数据格式 Python
Python处理JSON数据
【4月更文挑战第30天】该内容介绍了Python处理JSON数据的三个方法:1)使用`json.loads()`尝试解析字符串以验证其是否为有效JSON,通过捕获`JSONDecodeError`异常判断有效性;2)通过`json.dumps()`的`indent`参数格式化输出JSON数据,使其更易读;3)处理JSON中的日期,利用`dateutil`库将日期转换为字符串进行序列化和反序列化。
19 4
|
8天前
|
存储 JSON DataWorks
DataWorks产品使用合集之DataWorks将 MongoDB 中的数组类型写入到 DataWorks 的单个字段时,表示为字符串格式而非 JSON 格式如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
20 3
|
8天前
|
XML JSON 前端开发
【Web 前端】XML和JSON的区别?
【4月更文挑战第22天】【Web 前端】XML和JSON的区别?
【Web 前端】XML和JSON的区别?
|
11天前
|
存储 JSON 数据处理
|
11天前
|
XML JSON 中间件
中间件数据格式JSON与XML之间的转换
中间件数据格式JSON与XML之间的转换
23 3
|
12天前
|
JSON 数据可视化 定位技术
python_将包含汉字的字典数据写入json(将datav的全省数据中的贵州区域数据取出来)
python_将包含汉字的字典数据写入json(将datav的全省数据中的贵州区域数据取出来)
17 0
|
21天前
|
JSON JavaScript 数据格式
vue展示json数据,vue-json-viewer的使用
vue展示json数据,vue-json-viewer的使用
30 0
|
23天前
|
存储 JSON NoSQL
MongoDB的文档存储格式BSON和JSON的区别
MongoDB的文档存储格式BSON和JSON的区别