silverlight动态读取txt文件/解析json数据/调用wcf示例

简介: 终于开始正式学习silverlight,虽然有点晚,但总算开始了,今天看了一下sdk,主要是想看下silverlight中如何动态调用数据,对于数据库的访问,sdk中的官方示例多用的是Ado.Net数据服务,方便到是方便,就是感觉Ado.

终于开始正式学习silverlight,虽然有点晚,但总算开始了,今天看了一下sdk,主要是想看下silverlight中如何动态调用数据,对于数据库的访问,sdk中的官方示例多用的是Ado.Net数据服务,方便到是方便,就是感觉Ado.Net数据服务返回的xml太啰嗦了,一点也不精简,数据通讯量太大(N多无用的标签导致客户端与服务端之间传输数据增加了不少),于是想到能否直接用wcf返回json格式,

何况sdk中提到silverlight中System.Json已经完成了对json的解析


经实验,用WebClient貌似就能解析一切,包括加载json文本,纯文本,以及wcf,不过要注意的是:xap与被调用的txt或wcf必须在同一个域下,否则将调用失败,具体看下面的代码

Page.Xaml完整内容如下:

 

 1 < UserControl  x:Class ="WcfTest.Page"
 2     xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
 3     xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"  
 4      >
 5      < Grid  x:Name ="LayoutRoot"  Background ="White"  ShowGridLines ="True" >
 6          < Grid.RowDefinitions >
 7              < RowDefinition  Height ="*" ></ RowDefinition >
 8              < RowDefinition  Height ="*" ></ RowDefinition >
 9              < RowDefinition  Height ="*" ></ RowDefinition >
10          </ Grid.RowDefinitions >
11         
12          < TextBlock  x:Name ="txtJson"  Grid.Row ="0"  Grid.Column ="0" ></ TextBlock >
13          < TextBlock  x:Name ="txtBlank"  Grid.Row ="1"  Grid.Column ="0"   TextWrapping ="Wrap" ></ TextBlock >
14          < TextBlock  x:Name ="txtWcf"  Grid.Row ="2"  Grid.Column ="0"   TextWrapping ="Wrap" ></ TextBlock >
15         
16      </ Grid >
17 </ UserControl >

 

Page.Xaml.cs完整内容如下:

Code
using System;
using System.Json;
using System.Net;
using System.Windows.Controls;
using System.IO;

namespace WcfTest
{
    
public partial class Page : UserControl
    {
        
public Page()
        {
            InitializeComponent();
            LoadJsonTxt();
            LoadBlankTxt();
            LoadWcfTxt();
        }

        
/// <summary>
        
/// 加载Json格式的文本文件
        
/// </summary>
        void LoadJsonTxt()
        {
            Uri serviceUri 
= new Uri("http://localhost:7055/data/json.txt");//很奇怪,只能用绝对路径
            WebClient downloader = new WebClient();
            downloader.OpenReadCompleted 
+= new OpenReadCompletedEventHandler(LoadJsonTxtCompleted);
            downloader.OpenReadAsync(serviceUri);
        }

        
/// <summary>
        
/// 异常回调函数
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        void LoadJsonTxtCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            
if (e.Error == null)
            {
                JsonArray _data 
= (JsonArray)JsonArray.Load(e.Result);
                
string _Result = "";
                
for (int i = 0; i < _data.Count; i++)
                {
                    _Result 
+= (",name=" + _data[i]["name"].ToString());
                }
                
if (_Result.StartsWith(""))
                {
                    _Result 
= _Result.Substring(1);
                }
                
this.txtJson.Text = _Result;
            }
            
else
            {
                txtJson.Text 
= "出错:" + e.Error.Message.ToString();
            }
        }


        
/// <summary>
        
/// 加载普通格式的文本文件
        
/// </summary>
        void LoadBlankTxt()
        {
            Uri serviceUri 
= new Uri("http://localhost:7055/data/txt.txt");
            WebClient downloader 
= new WebClient();
            downloader.OpenReadCompleted 
+= new OpenReadCompletedEventHandler(LoadBlankTxtCompleted);
            downloader.OpenReadAsync(serviceUri);
        }

        
void LoadBlankTxtCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            
if (e.Error == null)
            {
                StreamReader _Reader 
= new StreamReader(e.Result);
                
this.txtBlank.Text = _Reader.ReadToEnd();
            }
            
else
            {
                txtBlank.Text 
= "出错:" + e.Error.Message.ToString();
            }
        }



        
/// <summary>
        
/// 加载wcf返回的文本
        
/// </summary>
        void LoadWcfTxt()
        {
            Uri serviceUri 
= new Uri("http://localhost:7055/Demo.svc/GetData?callBack=123");
            WebClient downloader 
= new WebClient();
            downloader.OpenReadCompleted 
+= new OpenReadCompletedEventHandler(LoadWcfCompleted);
            downloader.OpenReadAsync(serviceUri);
        }

        
void LoadWcfCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            
if (e.Error == null)
            {
                StreamReader _Reader 
= new StreamReader(e.Result);
                
this.txtWcf.Text = _Reader.ReadToEnd();
            }
            
else
            {
                txtWcf.Text 
= "出错:" + e.Error.Message.ToString();
            }
        }

    }
}


wcf的代码也在这里贴出来,就是一"启用了ajax的wcf服务",没啥特别的,下面的代码仅参考(从NorthWind数据库中,读取了表Categories的部分信息)

Code


最后附上:txt.txt以及json.txt二个测试文本的内容

json.txt内容:

[{'name':"jimmy.yang"},{'name':'yezhouyun'},{'name':123456}]

 

txt.txt内容:

要做到这两点只需要更改一下所示的高两部分即可。第一个高两部分表示我们将NorthwindEntities作为我们的数据源。NorthwindEntities是我们刚才创建的EDMX的类名,Employees等表都已经作为其属性被Mapping成对象。第二个高亮部分是控制EntitySet(其实就是对应的表一级)的访问权限。例如你仍然可以通过下边的代码仅仅暴露Employees对象的只读权限:config.SetEntityAccessRule(“Employees”,EntitySetRights.AllRead.这样,服务只会暴露Employees集合并且只接受读取,而不能有更新操作。

运行效果图如下:

 

目录
相关文章
|
9天前
|
SQL JSON 数据格式
SPL 处理多层 JSON 数据比 DuckDB 方便多了
esProc SPL 处理多层 JSON 数据比 DuckDB 更便捷,尤其在保留 JSON 层次与复杂计算时优势明显。DuckDB 虽能通过 `read_json_auto()` 将 JSON 解析为表格结构,但面对深层次或复杂运算时,SQL 需频繁使用 UNNEST、子查询等结构,逻辑易变得繁琐。而 SPL 以集合运算方式直接处理子表,代码更简洁直观,无需复杂关联或 Lambda 语法,同时保持 JSON 原始结构。esProc SPL 开源免费,适合复杂 JSON 场景,欢迎至乾学院探索!
|
28天前
|
XML JSON API
如何在 Postman 中上传文件和 JSON 数据
如果你想在 Postman 中同时上传文件和 JSON 数据,本文将带你一步一步地了解整个过程,包括最佳实践和技巧,让你的工作更轻松。
|
29天前
|
JSON JavaScript 前端开发
如何在 Postman 中发送 JSON 数据
我们将深入探讨使用 Postman 发送 JSON 数据这一主题,Postman 是一款强大的 API 测试和开发工具。无论您是经验丰富的开发人员还是新手,掌握这项技能对于高效的 API 测试和开发都至关重要。
|
1月前
|
JSON Java 数据库连接
怎样用 esProc 计算来自 Restful 的多层 json 数据
esProc 是一款强大的数据处理工具,可简化 Java 处理 Restful 接口返回的复杂多层 JSON 数据的难题。通过 esProc,不仅能轻松访问和解析 Restful 数据,还能高效完成复杂计算任务,并可无缝嵌入 Java 应用中作为计算引擎使用。例如,筛选特定分类订单或计算金额,esProc 的脚本简洁直观,远优于传统 SQL 或纯 Java 实现。此外,esProc 支持安全认证(如 Cookie 和 Token)及 JDBC 集成,为开发者提供灵活高效的解决方案。
|
2月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
264 29
|
6月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
181 2
|
2月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
78 4
|
2月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
2月前
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。
|
2月前
|
存储 前端开发 JavaScript
在线教育网课系统源码开发指南:功能设计与技术实现深度解析
在线教育网课系统是近年来发展迅猛的教育形式的核心载体,具备用户管理、课程管理、教学互动、学习评估等功能。本文从功能和技术两方面解析其源码开发,涵盖前端(HTML5、CSS3、JavaScript等)、后端(Java、Python等)、流媒体及云计算技术,并强调安全性、稳定性和用户体验的重要性。

推荐镜像

更多